AtCoder Beginner Contest 158
A - Station and Bus
解题方法:这一题只要判断一个字符串中有A和B两种字符串即可
#include<iostream> #include<bits/stdc++.h> typedef long long ll; using namespace std; ll read(){ ll x=0,w=1; char ch=0; while(ch<'0'||ch>'9'){ if(ch=='-') w=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return w*x; } int main(){ string ptr; cin>>ptr; int a=0,b=0; for(int i=0;i<ptr.length();i++){ if(ptr[i]=='A'){ a++; } if(ptr[i]=='B'){ b++; } } if(a&&b){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } return 0; }
B - Count Balls
解题方法:这一题比较简单,要你判断前N个球有几个蓝色的球,只要进行分类讨论即可
#include<iostream> #include<bits/stdc++.h> typedef long long ll; using namespace std; ll read(){ ll x=0,w=1; char ch=0; while(ch<'0'||ch>'9'){ if(ch=='-') w=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return w*x; } int main(){ ll N,A,B; cin>>N>>A>>B; if(N==(A+B)){ cout<<A<<endl; }else if(N>(A+B)){ ll num=A+B;/*总数*/ ll t=N/num;/*可以分成t组,每组有A个蓝的*/ ll e=N%num;/*这是余数*/ ll y=0; if(e>=A){ y=A; }else{ y=e; } cout<<A*t+y<<endl; }else if(N<(A+B)){ if(N>=A){ cout<<A<<endl; }else{ cout<<N<<endl; } } return 0; }
C - Tax Increase
解题方法:这一题也比较简单,但要注意它的不存在的条件,还有就是注意题目要求下取整
#include<iostream> #include<cmath> using namespace std; int main(){ int a,b; cin>>a>>b; int ans=-1; for(int i=1;floor(i*0.08)<=min(a,b);i++){ if(floor(i*0.08)==a&&floor(i*0.1)==b){ ans=i; break; } } cout<<ans<<endl; return 0; }
D - String Formation
解题方法:这一题就比较有意思了,刚开始的时候去暴力,结果TLE了,其实这一题始有技巧的,你要统计它总共翻转了多少次,然后根据它的奇偶性来判断,这样就可以避免无谓的翻转,至于添加字母这里,也要根据这一特性去操作,值得注意的是当翻转次数为奇数时,处在后面的字符串也要翻转,当为偶数时,处在前面的字符串要翻转
#include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int q; cin>>q; int t,f; char c; string front,end; front.clear(); end.clear(); int re_num=0; for(int i=0;i<q;i++){ cin>>t; if(t==1){ re_num++; }else if(t==2){ cin>>f; cin>>c; if(f==1){ if(re_num%2==0){ front.push_back(c); }else{ end.push_back(c); } }else{ if(re_num%2==0){ end.push_back(c); }else{ front.push_back(c); } } } } if(re_num%2!=0){ reverse(end.begin(), end.end()); }else{ reverse(front.begin(), front.end()); } string ans; if(re_num%2!=0){ reverse(s.begin(), s.end()); ans = end + s + front; }else{ ans = front + s + end; } cout<<ans<<endl; return 0; }