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

    https://codeforces.com/contest/1352

    本题解 (+) 熔岩 (=) 黑曜石

    E. Special Elements

    一看 (n=8000),就搞个 (O(n^2)) 水过吧

    先记录 (cnt[i]=( i) 在数列 (a) 中的出现次数 ()),然后遍历所有长度大于等于2的区间和 (sum=sumlimits_{i=l}^r a[i]),与其对应的special elements个数就是 (cnt[sum])。当然访问过 (cnt[sum]) 就后把 (cnt[sum]) 清空,避免重复记录

    #include <bits/stdc++.h>
    using namespace std;
    #define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
    #define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
    int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
    const int N=8010; typedef long long ll;
    int T,n;
    int a[N],cnt[N];
    signed main(){
    	cin>>T;
    	while(T--){
    		cin>>n;
    		fill(cnt,cnt+n+2,0);
    		int ans=0;
    		repeat(i,0,n){
    			cin>>a[i];
    			cnt[a[i]]++;
    		}
    		repeat(len,2,n+1){
    			int sum=0;
    			repeat(i,0,len-1)sum+=a[i];
    			repeat(i,len-1,n){
    				sum+=a[i];
    				if(sum<=n){ans+=cnt[sum]; cnt[sum]=0;}
    				sum-=a[i-len+1];
    			}
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

    F. Binary String Reconstruction

    构造题,只要一开始全是0,然后全是1,最后在01之间反复横跳即可

    #include <bits/stdc++.h>
    using namespace std;
    #define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
    #define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
    int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
    const int N=8010; typedef long long ll;
    int T,n0,n1,n2;
    signed main(){
    	cin>>T;
    	while(T--){
    		cin>>n0>>n1>>n2;
    		if(n1==0){
    			if(n0>0)repeat(i,0,n0+1)cout<<'0';
    			if(n2>0)repeat(i,0,n2+1)cout<<'1'; //这里n0和n2不可能同时大于0
    			cout<<endl;
    			continue;
    		}
    		repeat(i,0,n0+1)cout<<'0';
    		repeat(i,0,n2+1)cout<<'1';
    		repeat(i,0,n1-1)cout<<char('0'+i%2);
    		cout<<endl;
    	}
    	return 0;
    }
    

    G. Special Permutation

    叕是构造题,只要倒着输出所有奇数,然后正着输出所有偶数(2和4位置反一下)即可

    #include <bits/stdc++.h>
    using namespace std;
    #define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
    #define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
    int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
    const int N=8010; typedef long long ll;
    int T,n;
    signed main(){
    	cin>>T;
    	while(T--){
    		cin>>n;
    		if(n>=4){
    			repeat_back(i,1,n+1)if(i%2==1)cout<<i<<' ';
    			cout<<"4 2 ";
    			repeat(i,5,n+1)if(i%2==0)cout<<i<<' ';
    		}
    		else cout<<-1;
    		cout<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    vs2017 离线安装。
    c# begin & end.
    vc++ 下的WaitForSingleObject
    c# 工厂模式 ,委托 ,事件。
    微信分享 andriod studio
    mac osx 10.9 ftp server端口
    win32 调用多媒体函数PlaySound()
    [汇编语言]-第九章 在屏幕中间分别显示绿底红色,白底蓝色字符串"welcome to masm!"
    [汇编语言]-第九章 jcxz,loop指令,转移位移的意义
    补码
  • 原文地址:https://www.cnblogs.com/axiomofchoice/p/12861451.html
Copyright © 2011-2022 走看看