A-Two Rabbits

题面:
解题思路:这一题比较简单,只要算出两者的距离,两者的移动的速度和,再用前者对后者取模,若等于0,则可一符合题意反之不可。
#include <iostream>
#include <map>
#define ll long long
using namespace std;
int main(){
    ll n;
    cin>>n;
    int x,y,a,b;
    while(n--){
        cin>>x>>y>>a>>b;
        ll dis=(y-x);
        ll nos=a+b;
        if(dis%nos==0){
            cout<<dis/nos<<endl;
        }else{
            cout<<-1<<endl;
        }

    }
    return 0;
}

B-Longest Palindrome

题意:本题就是给你几个长度相同的字符串,通过其重新排列与删除一部分(不是必须的)组成一个回文串,求最长的回文串,并输出其长度,注意空串也符合情况。
解题思路:可以将其分为两种情况:1:可以通过将所给的字符串数组重新排列,其中有可能删除某些字符串,组成一个完整的回文字符串。2:它所给的字符串本身就是一个回文串,找到一个输出即可。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#define ll long long
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
	string ptr[120];
	for(int i=0;i<n;i++){
		cin>>ptr[i];
	} 
	vector<string> ve;
	int dis=0;/*在此位置插入*/
	for(int i=0;i<n;i++){
		string t=ptr[i];
		reverse(t.begin(),t.end());
		for(int j=i+1;j<n;j++){
			if(t==ptr[j]){/*存在*/
				ve.insert(ve.begin()+dis,ptr[i]);
				ve.insert(ve.begin()+(dis+1),ptr[j]); 
				dis++;//这是中间位置 
			}
		}
	}//babazyxwwxyzabab
	if(ve.size()==0){/*暂时没有*/
		for(int i=0;i<n;i++){
			string t=ptr[i];
			reverse(t.begin(),t.end());
			if(t==ptr[i]){/*找到了*/
				cout<<ptr[i].length()<<endl;
				cout<<ptr[i]<<endl;
				return 0;
			}
		}
		cout<<0<<endl;
		return 0;
	}else{/*存在且元素个数为偶数个*/
		for(int i=0;i<n;i++){/*遍历是否存在*/
			/*ptr[i]*/
			string ss=ptr[i];
			reverse(ss.begin(),ss.end());
			if(ss==ptr[i]){/*是回文*/
				int f=1;
				for(int j=0;j<ve.size();j++){
					if(ve[j]==ptr[i]){/*在里面*/
						f=0;
						break;
					}
				}
				if(f==1){/*是回文,不在里面*/ 
					/*ptr[i] 为回文*/
					int len=ptr[i].length();
					for(int j=0;j<ve.size();j++){
						len=len+ve[j].size();
					}
					cout<<len<<endl;
					for(int j=0;j<dis;j++){
						cout<<ve[j];
					}
					cout<<ptr[i];
					for(int j=dis;j<ve.size();j++){
						cout<<ve[j];
					}
					return 0; 
				} 
			} 		
		}
		int len=0;
		for(int i=0;i<ve.size();i++){
			len=len+ve[i].size();
		} 
		cout<<len<<endl;
		for(int i=0;i<ve.size();i++){
			cout<<ve[i];
		}
		cout<<endl;
		return 0;
	}
    return 0;
}

C-Air Conditioner

题面:

解题思路:可以通过算出每一个顾客到店里来的那个时刻是店主所能提供的温度范围,如果该顾客所能接受的范围在店主所能提供的范围内,则该顾客符合题意即可。
#include<iostream>
#include<string>
#include<stack>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#define ll long long
using namespace std;
int cmp(int a,int b){
	return a>b;
}
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;
}
bool IsPrimeNumber(int n){
    if (n==2){
        return true;
    }
    if (n%2==0||n==1){
        return false;
    }
    int sqrtn=(int)sqrt((double)n);
    bool flag=true;
    for (int i=3;i<=sqrtn;i+=2){
        if (n%i==0){
            flag=false;
        }
    }
    return flag;
}
int main(){
	ll T,n,m,l,r,t;
	cin>>T;
	while(T--){
        cin>>n>>m;
        t=0,l=r=m;
        int f=1;
        while(n--){
            ll ti,x,y;
            cin>>ti>>x>>y;
            l=l-(ti-t),r=r+(ti-t);/*这是在当前时间段可人为控制的最大温度的范围*/
            t=ti;
            l=max(l,x),r=min(r,y);
            if(l>r){
                f=0;
            }
        }
        if(f==0){
            cout<< "NO"<<endl;
        }else{
            cout<< "YES"<<endl;
        }
	}
    return 0;
}