• CSPs-2020 题解


    T1:儒略日

    题解

    T2:动物园

    根据题意,显然有:当饲料清单上某一位为0时,不能再加入一种动物使得这一位变为1,其余的位置可以为0或1

    (S)为所有饲料清单上第(P_i)(0)的个数(注意要去重

    那么最终答案就是(2^{k-S}-n)(k,n)即为题目中所给的(k,n)

    初始的饲料清单可以记录一个数(F=0),则(F) (xor_{i=1}^na_i)的结果就是饲料清单的值(令结果为(F))

    判断第(P_i)位是否为(0),可以判断(F|(1ull<<p_i))是否等于(F)。(这里的(1)要用(ull))

    需要特别注意的是最(k)最大可以达到(64),所以答案一定要用(unsigned) (long) (long)保存,不然会爆!

    然而太弱的我并没想到(k=64,S=0,n=0)这种情况,因为它的答案为(2^{64})(ull)并不能存下它,那么就只有特判了!

    Code

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    unsigned ll read()
    {
    	unsigned ll x=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 
    	return x*f;
    }
    bool vis[1000];
    unsigned ll n,m,c,k,F,q,p;
    int main()
    {
    	freopen("zoo.in","r",stdin);
    	freopen("zoo.out","w",stdout);
    	n=read(),m=read(),c=read(),k=read(),F=0;
    	for(unsigned ll i=1,a;i<=n;i++)a=read(),F=F|a;
    	for(unsigned ll i=1;i<=m;i++)
    	{
    		p=read(),q=read();
    		if((F|(1ull<<p))!=F&&!vis[p])k--,vis[p]=true;
    	}
    	if(k==64&&n==0)printf("18446744073709551616
    "),exit(0);
    	unsigned ll ans=(unsigned ll)pow(2,k)-n;
    	printf("%llu
    ",ans);
    	return 0;
    }
    
    

    T3:函数调用

    题解

    T4:贪吃蛇

    题解

  • 相关阅读:
    Passing Reference by value
    WPF中override ResourceDictionary中的设置的方法
    WPF中TextBox的PreviewMouseLeftButtonUp事件
    Attribute的理解和认识
    IIS添加服务
    Unix时间戳转换成C#中的DateTime
    KMP算法的实现
    IDA 宏定义
    实验吧-catalyst-system
    python整数转ASCII码
  • 原文地址:https://www.cnblogs.com/yueyuweihu/p/13985193.html
Copyright © 2020-2023  润新知