zoukankan      html  css  js  c++  java
  • 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;
        }
        
    }
  • 相关阅读:
    【题解】【LOJ2102】「TJOI2015」弦论
    【学习笔记】后缀自动机复习
    【博客介绍】笔者的自我介绍/博客简介
    【题解】【CodeForces653F】Ants on a Circle
    带修莫队
    [BZOJ3832]Rally(线段树+拓扑排序)
    [CTSC2010]星际旅行(带反悔的贪心)
    [TJOI2011]书架
    CF1204E Natasha, Sasha and the Prefix Sums
    [CSP校内集训]ginkgo(树上启发式合并/逆序对)
  • 原文地址:https://www.cnblogs.com/liyexin/p/12322982.html
Copyright © 2011-2022 走看看