用sort的代码:(WA了#17、#18)
//P7076 [CSP-S2020] 动物园
#include<cstdio>
#include<algorithm>
#include<iostream>
#define int unsigned long long
const int N=1e6+10;
int mark,cnt,a[N];
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
signed main()
{
int n=read(),m=read(),c=read(),k=read();
for(int i=1;i<=n;++i)mark|=read();
for(int i=1;i<=m;++i){a[i]=read();int x=read();}
std::sort(a+1,a+1+m);
for(int i=1;i<=m;++i)
if(a[i]!=a[i-1]&&!((mark>>a[i])&1))++cnt;
if(k-cnt==64)puts("18446744073709551616");
else std::cout<<(1ull<<(k-cnt))-n;
return 0;
}
没用sort的代码(AC):
//P7076 [CSP-S2020] 动物园
#include<cstdio>
#include<iostream>
#define int unsigned long long
const int N=1e6+10;
int mark,cnt,a[N];
bool b[64+10];
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
signed main()
{
int n=read(),m=read(),c=read(),k=read();
for(int i=1;i<=n;++i)mark|=read();
for(int i=1;i<=m;++i){a[i]=read();if(!(mark>>a[i]&1ull))b[a[i]]=1;int x=read();}
for(int i=0;i<k;++i)
cnt+=(b[i]?1:0);
if(k-cnt==64)puts("18446744073709551616");
else std::cout<<(1ull<<(k-cnt))-n;
return 0;
}
似乎效果都一样?为什么用sort就会WA?
感谢大佬指教!