用sort为啥不行呢?
查看原帖
用sort为啥不行呢?
322285
北京楼主2021/8/7 20:42

用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?

感谢大佬指教!

2021/8/7 20:42
加载中...