• Codeforces Round #452 (Div. 2)


    第一次打。。(太弱(+99积分是几个意思

    A

    题意:一堆数,只有1和2,问最多凑出多少个3.
    分情况即可

    #include<cstdio>
    int main(){
    	int a=0,b=0,k,n;
    	scanf("%d",&n);
    	while(n--)scanf("%d",&k),k==1?++a:++b;
    	if(a<=b)printf("%d
    ",a);
    	else printf("%d
    ",b+(a-b)/3);
    	return 0;
    }
    

    B

    题意:问你有没有可能找出连续的n个月天数与给定的相同。
    这个打表枚举判断即可。
    用py的切片很容易实现
    据说很多人被hack了,还是复制一遍稳啊

    l=[
    31,28,31,30,31,30,31,31,30,31,30,31,
    31,28,31,30,31,30,31,31,30,31,30,31,
    31,28,31,30,31,30,31,31,30,31,30,31,
    31,29,31,30,31,30,31,31,30,31,30,31,
    ]
    l+=l
    n=int(input())
    k=list(map(int,input().split()))
    lim=12*4*2-n+1
    for i in range(0,lim):
        if k==l[i:i+n]:
            print("YES");exit()
    print("NO")
    

    C

    题意:一个排列,分成两个集合,使和的差最小,输出最小的差和任意一组方案。
    先当做n%40看,显然一个集合([1,frac{n}{4}]cup (frac{3}{4}n,n])即可。ans=0
    n%4
    1:所有集合数++,剩的1放任意一个集合。ans=1
    n%42:所有集合数++,剩的1放肛♂才没放1的集合里。ans=1
    n%4
    3:所有集合数++,剩的1放n%4==2时放的1的集合里。ans=0
    OjbK

    #include<cstdio>
    #define rg register
    int main(){
    	int n;scanf("%d",&n);
    	switch(n%4){
    	case 0:
    		puts("0");
    		printf("%d ",n/2);
    		for(rg int i=1;i<=n>>2;++i)printf("%d %d ",i,n-i+1);
    		break;
    	case 1:
    		puts("1");
    		n-=1;
    		printf("%d ",n/2);
    		for(rg int i=1;i<=n>>2;++i)printf("%d %d ",i+1,n-i+2);
    		break;
    	case 2:
    		puts("1");
    		n-=2;
    		printf("%d ",n/2+1);
    		for(rg int i=1;i<=n>>2;++i)printf("%d %d ",i,n-i+1);
    		printf("%d",n+1);
    		break;
    	default:
    		puts("0");
    		n-=3;
    		printf("%d ",n/2+2);
    		for(rg int i=1;i<=n>>2;++i)printf("%d %d ",i+1,n-i+2);
    		printf("%d 1",n+2);
    	}
    	return 0;
    }
    

    D

    题意:[1,n]里选两个不重复的数相加末尾9最多有多少个?输出方案数
    先得到最多多少个,然后枚举满足的数(脑补证明,此数不会相对99...9太大)
    然后算一算值域

    #include<cstdio>
    #include<algorithm>
    #define rg register
    typedef long long ll;
    ll bin[1005];ll lim,n;
    ll p[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000ll,100000000000ll};
    ll ans=0;
    int solve(int w){
    	static ll x,l,r;
    	x=w*p[lim]+bin[lim];l=std::max(1ll,x-n),r=std::min(n,x-1);
    	if(l<=r)return (r-l+1)/2;
    	else return 0;
    }
    int main(){
    	scanf("%I64d",&n);
    	for(rg int i=1;i<=10;i++)bin[i]=bin[i-1]*10+9;
    	if(n<=4){printf("%I64d
    ",n*(n-1)/2);return 0;}
    	for(lim=1;lim<=10;lim++)
    		if(n*2<bin[lim]){lim--;break;}
    	for(rg int i=0;i<1000;i++)ans+=solve(i);
    	printf("%I64d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    HDU1266 Reverse Number
    codevs1380 没有上司的舞会
    codevs1163 访问艺术馆
    codevs2144 砝码称重 2
    codevs1553 互斥的数
    codevs1230 元素查找
    codevs3118 高精度练习之除法
    codevs1245 最小的N个和
    codevs1063 合并果子
    codevs1052 地鼠游戏
  • 原文地址:https://www.cnblogs.com/xzz_233/p/cf452-2.html
Copyright © 2020-2023  润新知