Codeforces Round #585 (Div. 2) CF1215A~C
Posted yoududezongzi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #585 (Div. 2) CF1215A~C相关的知识,希望对你有一定的参考价值。
CF1215A. Yellow Cards简单的模拟,给定了黄票张数,判断最少和最多有多少人被罚下场。
#include <bits/stdc++.h> using namespace std; int main() int a,b,aa,bb,n,nnn; cin>>a>>b>>aa>>bb>>n; nnn=n; int t=(aa-1)*a+(bb-1)*b; int tt=0; if(aa<=bb) if(n>=aa*a) tt+=a; n-=aa*a; else tt+=n/aa; int o=n/aa; n-=o*aa; if(n>=bb*b) tt+=b; n-=bb*b; else tt+=n/bb; int o=n/bb; n-=o*bb; else if(n>=bb*b) tt+=b; n-=bb*b; else tt+=n/bb; int o=n/bb; n-=o*bb; if(n>=aa*a) tt+=a; n-=aa*a; else tt+=n/aa; int o=n/aa; n-=o*aa; if(t>=nnn) cout<<"0 "<<tt<<endl; else cout<<min(nnn-t,a+b)<<" "<<tt<<endl; return 0;
CF1215B. The Number of Products,我们以第一位数到最后一位数的乘积来分析,1-n的状态数分别是n n-1 n-2……1。
观察易得减少一个正数时,正数的状态-1,减少一个负数时,负数的状态数-1,并正负状态交换,即可O(n)递推求出答案
#include <bits/stdc++.h> using namespace std; int a[2000005]; typedef long long ll; int main() int n; cin>>n; ll l=0,r=0; ll tt=1; for(int i=1;i<=n;++i) ll t; cin>>t; if(t>0) a[i]=1; else a[i]=-1; tt*=a[i]; if(tt>0) l++; else r++; ll al=l,ar=r; for(int i=2;i<=n;++i) if(a[i-1]>0) l--; else r--; swap(l,r); al+=l; ar+=r; cout<<ar<<" "<<al; return 0;
CF1215C. Swap Letters 首先只有ab和ba出现的次数为奇数不成立,其余时候ab\ba可和ab\ba一次配对,ab和ba需要两次这里我用了vecotr来避免重复使用
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<int>vt1; vector<int>vt2; int main() int n,aaa=0; cin>>n; string str1,str2; cin>>str1>>str2; int flag=0; for(int i=0;i<str1.size();++i) if(str1[i]==‘a‘&&str2[i]==‘a‘) flag++; if(str1[i]==‘b‘&&str2[i]==‘b‘) flag++; flag=n-flag; if(flag%2!=0) cout<<-1; return 0; for(int i=0;i<str1.size();++i) if(str1[i]==‘a‘&&str2[i]==‘b‘) vt1.push_back(i); if(str2[i]==‘a‘&&str1[i]==‘b‘) vt2.push_back(i); for(int i=vt1.size()-1;i>=0;i-=2) int j=i-1; if(j>=0) aaa++; vt1.pop_back(); vt1.pop_back(); for(int i=vt2.size()-1;i>=0;i-=2) int j=i-1; if(j>=0) aaa++; vt2.pop_back(); vt2.pop_back(); if(vt1.size()) int i=vt1.size()-1; int j=vt2.size()-1; aaa++; aaa++; cout<<aaa<<endl; vt1.clear(); vt2.clear(); for(int i=0;i<str1.size();++i) if(str1[i]==‘a‘&&str2[i]==‘b‘) vt1.push_back(i); if(str2[i]==‘a‘&&str1[i]==‘b‘) vt2.push_back(i); for(int i=vt1.size()-1;i>=0;i-=2) int j=i-1; if(j>=0) cout<<vt1[j]+1<<" "<<vt1[i]+1<<endl; vt1.pop_back(); vt1.pop_back(); for(int i=vt2.size()-1;i>=0;i-=2) int j=i-1; if(j>=0) cout<<vt2[j]+1<<" "<<vt2[i]+1<<endl; vt2.pop_back(); vt2.pop_back(); if(vt1.size()) int i=vt1.size()-1; int j=vt2.size()-1; cout<<vt1[i]+1<<" "<<vt1[i]+1<<endl; cout<<vt1[i]+1<<" "<<vt2[j]+1<<endl; return 0;
以上是关于Codeforces Round #585 (Div. 2) CF1215A~C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #585 (Div. 2) D. Ticket Game
Codeforces Round #585 (Div. 2)
Codeforces Round #585 (Div. 2)
Codeforces Round #585 (Div. 2) B.The Number of Products(动态规划)