Codeforces Round #620 (Div. 2)
原创
©著作权归作者所有:来自51CTO博客作者wx63316144dde40的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
}
}