求助,一句话差30分
查看原帖
求助,一句话差30分
257560
Asphy7xia楼主2021/10/8 18:57

AC代码:

#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n, m, c, k, ans, zoo, tot;

inline ull read ()
{
	ull x = 0;
	char c = getchar ();
	while (! isdigit (c))  c = getchar ();
	while (isdigit (c))
	{
		x = (x << 3) + (x << 1) + c - '0';
		c = getchar ();
	}
	return x;
}

inline void file ()
{
	freopen ("zoo.in", "r", stdin);
	freopen ("zoo.out", "w", stdout);
}

int main(){
//	file (); 
	n = read (), m = read (), c = read (), k = read ();
	ull x, u, v;
	for (int i = 1; i <= n; i++)  x = read (), tot |= x;
	for (int i = 1; i <= m; i++)
	{
		u = read (), v = read ();
		u = 1ull << u;
		if (! (tot & u))  zoo |= u;
	}
	for (int i = 0; i < k; i++)  if ((zoo >> i) & 1)  ans++;
	ans = k - ans;
	if (ans == 64 && ! n)  printf ("18446744073709551616");
	else  printf ("%llu", (1ull << ans) - n);
	return 0;
}

70分代码:

#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n, m, c, k, ans, zoo, tot;

inline ull read ()
{
	ull x = 0;
	char c = getchar ();
	while (! isdigit (c))  c = getchar ();
	while (isdigit (c))
	{
		x = (x << 3) + (x << 1) + c - '0';
		c = getchar ();
	}
	return x;
}

inline void file ()
{
	freopen ("zoo.in", "r", stdin);
	freopen ("zoo.out", "w", stdout);
}

int main(){
//	file (); 
	n = read (), m = read (), c = read (), k = read ();
	ull x, u, v;
	for (int i = 1; i <= n; i++)  x = read (), tot |= x;
	for (int i = 1; i <= m; i++)
	{
		u = read (), v = read ();
		u = 1ull << u;
		if (! (tot & u))  zoo |= u;
	}
	for (int i = 0; i < k; i++)  if (zoo & (1 << i))  ans++;
	ans = k - ans;
	if (ans == 64 && ! n)  printf ("18446744073709551616");
	else  printf ("%llu", (1ull << ans) - n);
	return 0;
}

两份代码只有第36行的一句话不一样

AC代码是

for (int i = 0; i < k; i++)  if ((zoo >> i) & 1)  ans++;

70分代码是

for (int i = 0; i < k; i++)  if (zoo & (1 << i))  ans++;

但我认为这两句话应该是等价的,请巨佬指点。

2021/10/8 18:57
加载中...