A - Contest for Robots CodeForces - 1321A
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int a[110]; int b[110]; int sum1=0; int sum2=0; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { cin>>b[i]; if(a[i]==b[i]) continue; else if(a[i]==1) { sum1++; } else if(b[i]==1) { sum2++; } } if(sum1==sum2&&sum1==0) { cout<<"-1"<<endl; } else if(sum1>sum2) cout<<"1"<<endl; else if(sum1==sum2) cout<<"2"<<endl; else { int score=1; int cha=sum2-sum1; if(sum1!=0) score+=cha/sum1+1; else score=-1; cout<<score<<endl; } // system("pause"); return 0; } 水题,唯一注意事项:当出现除法时,要考虑分母是否为0B - Journey Planning CodeForces - 1321B
由于数据较大不可能穷举,而由题意可知当数与数间的距离为这两数之差时,这些数可以放到一起,所以同堆的数 -自身位置对应的下标一致。但减法后可能会是负下标,因此用map存。 #include <bits/stdc++.h> using namespace std; typedef long long ll; map <ll,ll> b; int main() { ll a[200010] = {0}; int n; cin >> n; ll sum = 0; ll c; for (ll i = 1; i <= n; i++) { cin >> a[i]; if(b.count(a[i]-i)) b[a[i]-i]+=a[i]; else { b[a[i]-i]=a[i]; } sum=max(sum,b[a[i]-i]); } cout << sum << endl; //system("pause"); return 0; } 启示:当进行运算时要考虑可能的错误:加乘超界,减法出现负数,除法分母为0.C - Remove Adjacent CodeForces - 1321C
分析可知,每次应删除最大的字母,这样可以使删除量最大化。暴力求解即可,利用string的erase去除元素, 枚举从串中最大字母开始删起到a结束。注意:如bba,第一个b只遍历一遍的话无法删除,因此应当对同一个多次 枚举清除(枚举100次,因为串最长100)。 改自https://www.cnblogs.com/GRedComeT/p/12442873.html #include<bits/stdc++.h> using namespace std; void solve() { int n; string str; cin >> n >> str; int ans = 0; int maxx=0; for(int i = 0; i < str.size(); ++i) { maxx=max(maxx,str[i]-'a'); } for(int k = maxx; k >= 0; --k) { for(int t = 0; t < 100; ++t) { for(int i = 0; i < str.size(); ++i) { if((str[i] - 'a' == k) && ((str[i-1] - 'a' == k-1) || (str[i+1] - 'a' == k-1))) { ans++; str.erase(i, 1); i--; } } } } cout << ans; } int main() { solve(); //system("pause"); return 0; }