Codeforces Round #668 (Div. 2)A->C
阿新 • • 發佈:2020-09-08
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]; structnode { 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; } }