两个代码,一个在 1 后加 ull ,一个不加;
一个AC,一个WA。
不懂就问, ull 的作用是什么啊,求科普。。
AC代码:
#include<iostream>
#define ull unsigned long long
#define N 65
using namespace std;
ull n, m, c, k, ans, vis[N], a, id, p, q;
int main(){
scanf("%llu%llu%llu%llu", &n, &m, &c, &k);
for(int i = 1; i <= n; i++){
scanf("%llu", &a);
id = 0;
while(a){
if(a % 2) vis[id] = 1;
a >>= 1, id++;
}
}
for(int i = 1; i <= m; i++){
scanf("%llu%llu", &p, &q);
if(!vis[p]) k--, vis[p] = 1;
}
if(k == 64 && !n) printf("18446744073709551616");
else ans = (k == 64) ? -n : (1ull << k) - n, printf("%llu", ans);
return 0;
}
WA代码:
#include<iostream>
#define ull unsigned long long
#define N 65
using namespace std;
ull n, m, c, k, ans, vis[N], a, id, p, q;
int main(){
scanf("%llu%llu%llu%llu", &n, &m, &c, &k);
for(int i = 1; i <= n; i++){
scanf("%llu", &a);
id = 0;
while(a){
if(a % 2) vis[id] = 1;
a >>= 1, id++;
}
}
for(int i = 1; i <= m; i++){
scanf("%llu%llu", &p, &q);
if(!vis[p]) k--, vis[p] = 1;
}
if(k == 64 && !n) printf("18446744073709551616");
else ans = (k == 64) ? -n : (1 << k) - n, printf("%llu", ans); //问题出在这里
return 0;
}