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++;
但我认为这两句话应该是等价的,请巨佬指点。