csp-s2020动物园

先看数据规模

20%的数据点pi互不相同,那么答案就是2^(k-m)-n。这个20分是非常容易拿的。

当然,本题是要拿满分的。拿满分,关键是看两个点

一是位运算(怎么想到的?看数据规模,肯定要注意时间复杂度了),将动物编号 | 后得到一个二进制数an,接下来将an与食物清单&,如果得到的非零,那么这个食物可选可不选,如果是零,那么这个食物就不能选。将这些不能选的位置数量记下来,记作cns。那么答案就是2^(k-cns)-n。

二是数据范围,因为k最大可取64,而2^64超出了ull的上限,可以特判,当k-cns==64,且n=0的时候,直接输出2^64。可以用window计算器科学计数器模式计算得到。

本题致命点在1<

#include
#define maxn 100000005
#define ll long long 
#define ull unsigned long long 
using namespace std;

unsigned long long n,m,c,k;
unsigned long long a,an=0,p,q,cns;
bool vis[maxn];

int main()
{
	freopen("zoo14.in","r",stdin);
	cin>>n>>m>>c>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		an|=a;
	}
	//cout<>p>>q;
		if(an & (1ull<

你可能感兴趣的:(c++)