A:http://codeforces.com/contest/1405/problem/A
解析:
倒序输出即可。
#include<bits/stdc++.h> #include<map> #include<iostream> #include<cstring> #include<cmath> using namespace std; typedef long long ll; const int maxn=1e2+10; const int maxn2=1e9+10; const int mod=1e9+10; int a[maxn]; struct node { int x1,y1,x2,y2; }st[maxn]; int main() { int t; cin>>t; while(t--) { int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=n;i>=1;i--) cout<<a[i]<<" "; cout<<endl; } }
B:http://codeforces.com/contest/1405/problem/B
题意:
给出长度为n的数组,和为0
操作:
i j
-1 +1 免费
j i
+1 -1 花费1
求最少操作数,使得所有数字变为0
解析:
从前往后,累加正数,每次遇到负数,就进行抵消。
如果这个负数抵消完以后,依然<0,那么操作数就是它的绝对值。
因为总和为0,那么一系列抵消以后,如果还剩有负数,那么它们其后一定存在正数,所以负数的绝对值和就是答案。
#include<bits/stdc++.h> #include<map> #include<iostream> #include<cstring> #include<cmath> using namespace std; typedef long long ll; const int maxn=1e5+10; const int maxn2=1e9+10; const int mod=1e9+10; ll a[maxn]; struct node { int x1,y1,x2,y2; }st[maxn]; int main() { int t; cin>>t; while(t--) { int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; ll sum = 0 ; ll cnt=0; for(int i=1;i<=n;i++) { if(a[i]>=0) sum+=a[i]; else { sum+=a[i]; if(sum<0) { cnt-=sum; sum=0; } } } cout<<cnt<<endl; } }
C:http://codeforces.com/contest/1405/problem/C
题意:
长度为n的字符串,?可以变成0或1
是否能使所有k长的子字符串,其中的0,1的数目相同
解析:
由此可见,之间的字符为公用,那么要想保证条件,则要满足si==si+k....
有结论,Si=Si%k
那么,从i=k开始,如果s[i]==‘?‘,那么直接默认它改成了和s[i%k]一样
如果s[i]==s[i%k],已满足条件,继续。
以上两个条件都不满足,如果s[i+k]为‘?‘,就对其做出改变,否则不合法。
以上的操作,实际上都是对s0~sk-1的复制操作。
所以只要检查一遍s0~sk-1,即可
#include<bits/stdc++.h> #include<map> #include<iostream> #include<cstring> #include<cmath> using namespace std; typedef long long ll; const int maxn=1e5+10; const int maxn2=1e9+10; const int mod=1e9+10; ll a[maxn]; struct node { int x1,y1,x2,y2; }st[maxn]; int main() { int t; cin>>t; while(t--) { int n,k; cin>>n>>k; string s; cin>>s; int ok =0; for(int i=k;i<n;i++) { if(s[i]==‘?‘||s[i]==s[i%k]) continue; if(s[i%k]==‘?‘) s[i%k]=s[i]; else { ok=1;break; } } int c1=0,c0=0; for(int i=0;i<k;i++) { if(s[i]==‘1‘) c1++; else if(s[i]==‘0‘) c0++; } if(c1>(k/2)||c0>(k/2)||ok==1) cout<<"NO"<<endl; else cout<<"YES"<<endl; } }
Codeforces Round #668 (Div. 2)A->C
原文:https://www.cnblogs.com/liyexin/p/13634493.html