Codeforces Round #620 (Div. 2)
http://codeforces.com/contest/1304
这把心态爆炸哈哈,B题把心思搞得很乱,写着写着受不了就关机了。以后不能这样了,一个普通比赛心态就这么差,谈何比赛?
A. Two Rabbits
题意:倆兔子,坐标轴上一只往左一只往右,给出初始坐标和速度问是否能在同一时间相遇。
#include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<vector> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; int main() { int t; cin>>t; while(t--) { ll x,y,a,b; cin>>x>>y>>a>>b; if((y-x)%(a+b)==0) cout<<(y-x)/(a+b)<<endl; else cout<<"-1"<<endl; } }
B. Longest Palindrome
题意:在给出的字符串中(不存在重复)组出一个最长回文串出来,存在就输出其长度和结果,否则就是"0"。
解析:由于不存在重复串,所以把互为回文的串放两边,纯回文的放中间。我这里使用string l , mid ;L来记录互为回文的左边,mid记录本身为回文的串。为什么我没有用r来记录右边呢?因为这里存在一个输出顺序的问题,不能简单相加,是个先进后出的情况。所以我用了vis数组来记录输出部分右边的坐标,最后再倒着输出就好了!
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=105; int vis[maxn]; struct node { string s; }st[maxn]; int main() { int n,m; cin>>n>>m; string s; for(int i=0;i<n;i++) { cin>>st[i].s; } int tot=0; string l,mid,r; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { string ch; for(int k=m-1;k>=0;k--) { ch+=st[j].s[k]; } if(ch==st[i].s) { l+=st[i].s; vis[tot++]=j; break; } } } for(int i=0;i<n;i++) { int k=0; for(int j=0;j<m;j++) { if(st[i].s[j]!=st[i].s[m-1-j]) { k=1;break; } } if(!k) { mid+=st[i].s; break; } } string all=l+mid; if(all.length()==0) cout<<"0"<<endl; else { cout<<all.length()+tot*m<<endl; cout<<l<<mid; for(int i=tot-1;i>=0;i--) cout<<st[vis[i]].s; cout<<endl; } }
C. Air Conditioner
题意:给出客人数量和初始温度,然后是每个客人到场时间和客人喜欢的温度界限。空调可以每分钟升1°或者降1°或者恒温。问是否能通过调节温度来满足每个客人?YES:NO
解析:对于这种题,调节温度的过程具体我们是无法得知的,但是根据客人喜欢的温度界限,可以受此启发,我们也设定一个随时间不断变化的温度界限,如果客人的区间不超出它,就可以满足这个客人,否则就是NO。比如初始温度l=0,r=0,下个客人5分钟到场,那么我们的温度变化范围为[-5,5],如果客人满意区间和它有交集,就可以,否则直接输出NO
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; typedef long long ll; int main() { int T; cin>>T; while(T--) { ll n,m; cin>>n>>m; ll t,a,b; ll l=m,r=m; ll time=0; int ok=0; for(int i=0;i<n;i++) { cin>>t>>a>>b; l=l-(t-time); r=r+(t-time); if(r<a||b<l) { ok=1; } else { l=max(l,a); r=min(b,r); } time=t; } //cout<<"?"<<endl; if(ok) cout<<"NO"<<endl; else cout<<"YES"<<endl; } }