zoukankan      html  css  js  c++  java
  • Codeforces Round #640 (Div. 4)

    A 输出非零位

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=200010;
    int t,n,m;
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		vector<int> ve;
    		int cnt=0;
    		while(n)
    		{
    			if(n%10) ve.push_back((n%10)*pow(10,cnt));
    			cnt++;
    			n/=10;	
    		}	
    		cout<<ve.size()<<endl;
    		for(auto i:ve)
    			cout<<i<<' ';
    		puts("");
    	}	
    	return 0;
    }
    

    B 全是奇数时,前k-1个都为1,判断最后一个是否为奇数;
    全是偶数时,前k-1个都是2,判断最后一个是否为偶数;(最后一个数大于0)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=200010;
    int t,n,m;
     
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m;
    		if(m>n) puts("NO");
    		else if((n-m+1)&1)
    		{
    			puts("YES");
    			for(int i=0;i<m-1;i++) cout<<1<<' ';
    			cout<<n-m+1<<endl;
    		}
    		else if((n-m*2+2)>0&&(n-m*2+2)%2==0)
    		{
    			puts("YES");
    			for(int i=0;i<m-1;i++) cout<<2<<' ';
    			cout<<n-m*2+2<<endl;
    		}
    		else puts("NO");
    	}	
    	return 0;
    }
    

    C 除了n的倍数其余全都是。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=200010;
    int t,n,k;
     
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>k;
    		ll x=(k+n-2)/(n-1)-1;
    		cout<<1ll*x*n+(k-x*(n-1))<<endl;
    	}	
    	return 0;
    }
    

    D 双指针扫一遍即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=200010;
    int t,n,k;
    int s[N];
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=0;i<n;i++) scanf("%d",s+i);
    		int l=0,r=n-1,cnt=0;
    		int a=0,b=0,sum1=0,sum2=0;
    		while(l<=r)
    		{
    			int res=0;
    			if(cnt&1)
    			{
    				while(res<=sum1&&l<=r)
    					res+=s[r--];
    				sum2=res;
    				b+=res;
    			}
    			else
    			{
    				while(res<=sum2&&l<=r)
    					res+=s[l++];
    				sum1=res;
    				a+=res;
    			}
    			cnt++;
    		}
    		printf("%d %d %d
    ",cnt,a,b);
    	}	
    	return 0;
    }
    

    E n的总合不超过8000,O(n^2)就可以了。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=8010;
    int t,n,k;
    int s[N],b[N];//b[i]表示i的个数
    //int f[N][N],f[i][j]表示以第一个数为右端点长度为j的区间和,会超内存
    int f[2][N];//f[i][]只与f[i-1][]有关,滚动数组优化省内存,其实前缀和更简单
    bool st[N];
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=0;i<=n;i++) b[i]=0,st[i]=0;
    		for(int i=1;i<=n;i++) scanf("%d",s+i),b[s[i]]++;
    		int cnt=0;
    		f[1][1]=s[1];
    		for(int i=2;i<=n;i++) 
    		{
    			f[i&1][1]=s[i];
    			for(int j=2;j<=i;j++)
    			{
    				int num=f[i&1][j]=f[i-1&1][j-1]+s[i];
    				if(num<=n&&!st[num])
    				{
    					cnt+=b[num];
    					st[num]=1;
    				}
    			}
    		}
    		printf("%d
    ",cnt);
    	}	
    	return 0;
    }
    

    F 分情况模拟即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=200010;
    int t,n,k,a,b,c;
    int s[N];
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d%d%d",&a,&b,&c);
    		if(c)
    		{
    			if(b&1)
    			{
    				for(int i=0;i<=c;i++) printf("1");
    				for(int i=0;i<b;i++)
    					printf("%d",i&1?1:0);
    				for(int i=1;i<=a;i++) printf("0");
    			}
    			else if(b) 
    			{
    				for(int i=0;i<=c;i++) printf("1");
    				for(int i=0;i<=a;i++) printf("0");
    				for(int i=1;i<b;i++) printf("%d",i%2);
    			}
    			else 
    				for(int i=0;i<=c;i++) printf("1");//a,c不等0,b等0的情况不存在
    		}
    		else
    		{
    			for(int i=0;i<=a;i++) printf("0");
    			for(int i=1;i<=b;i++) printf("%d",i%2);
    		}
    		puts("");
    	}	
    	return 0;
    }
    

    G n大于4时排奇数再排偶数一定可以,n=4特判。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=8010;
    int t,n,k;
    int main()
    {
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		if(n<4) puts("-1");
    		else if(n==4) puts("2 4 1 3");
    		else
    		{
    			if(n&1)
    			{
    				for(int i=1;i<=n;i+=2) printf("%d ",i);
    				printf("%d %d ",n-3,n-1);
    				for(int i=n-5;i;i-=2) printf("%d ",i);
    			}
    			else
    			{
    				for(int i=1;i<=n;i+=2) printf("%d ",i);
    				printf("%d %d %d ",n-4,n,n-2);
    				for(int i=n-6;i;i-=2) printf("%d ",i);
    			}
    			puts("");
    		}
    	}	
    	return 0;
    }
    
  • 相关阅读:
    2016.11.9 小测试
    【noip】跟着洛谷刷noip题2
    【长沙集训】2017.10.10
    【noip】跟着洛谷刷noip题
    Oracle-函数-translate
    bit,byte,char,string区别与基本类型认识
    通俗地讲,Netty 能做什么?
    oracle判断一个字符串中是否包含另外一个字符串
    Oracle导入导出数据库(exp/imp和expdp/impdp的区别)
    同步异步以及阻塞和非阻塞的区别
  • 原文地址:https://www.cnblogs.com/neflibata/p/12871736.html
Copyright © 2011-2022 走看看