B :Longest Palindrome
如果要构造这样一个字符串,如果一个字串的反转在给的字符串集合中出现过,则说明这个字符串可以参与构造;(前提自己不是回文串);如果自己是回文串,那么可以把它构造到中间;
#include <bits/stdc++.h>
using namespace std;
map<string ,int> mp;
int main()
{
int n,m;
cin >>n>>m;
string s[200];
for(int i=0;i<n;i++)
{
cin>>s[i];
mp[s[i]]=2;
}
queue<string> q;
stack<string> p;
for(int i=0;i<n;i++)
{
string ss=s[i];
reverse(ss.begin(),ss.end());
//cout <<s[i]<<" "<<ss<<endl;
if(mp[ss]==2&&ss!=s[i])
{
//cout <<s[i]<<endl;
q.push(s[i]);
p.push(ss);
mp[s[i]]=1;
}
}
string str;
for(int i=0;i<n;i++)
{
string sss=s[i];
reverse(sss.begin(),sss.end());
if(sss==s[i])
{
str=s[i];
break;
}
}
cout <<q.size()*m+str.size()+p.size()*m<<endl;
while(!q.empty()) cout <<q.front(),q.pop();
cout <<str;
while(!p.empty()) cout <<p.top(),p.pop();
}
C:Air Conditioner
当这个客人来的时候,记录上一个客人可以接受温度的范围,从而算出上一个客人走到这一个客人来这段时间内可以调控温度的最大范围,求出来的范围和这个客人所能接受的范围必须有交集;然后更新这个客人所能调控的温度范围;
以此类推;
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
int main(){
int t;
cin>>t;
while(t--){
LL n,m;
cin >>n>>m;
LL tt=0,ll=m,hh=m;
LL flag=1;
LL t,l,h;
for(LL i=0;i<n;i++)
{
cin >>t>>l>>h;
if((hh+(t-tt)<l)||(ll-(t-tt)>h)) flag=0;
if(!flag) continue;
ll =max(l,ll-(t-tt)),hh=min(h,hh+(t-tt));
if((l>=ll&&l<=hh)||(h>=ll&&h<=hh)||(ll>=l&&ll<=h) ) flag=1;
else flag=0;
tt=t;
}
if(flag) cout <<"YES"<<endl;
else cout <<"NO"<<endl;
}
return 0;
}