zoukankan      html  css  js  c++  java
  • Codeforces Round #620 (Div. 2)

    QAQ

    A. Two Rabbits

    题意:

    有两只兔子,距离为n,左边兔子每秒向右跳a,右边兔子每秒向左跳b,问两只兔子何时能相遇,如果不能相遇输出-1

    思路:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn =1e3+10;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            LL x,y,a,b;
            cin >> x >> y >> a>> b;
            if((y-x)%(a+b)!=0)
                printf("-1
    ");
            else
                cout << (y-x)/(a+b)<< "
    ";
        }
        return 0;
    }

    简单题,直接模拟即可,详细见代码。

    代码:

    B. Longest Palindrome

    题意:

    给你n个等长的字符串,求由这n个字符串构成的最长的镜像串

    思路:

    如果有两个是对称的那一定要加上,如果可能的话在中间再放上一个本身是镜像串的串

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn =1e3+10;
    map<string,int>mp;
    string s[105];
    bool vis[105];
    bool check(string sp,int len)
    {
        for(int i = 0,j=len-1;i<=j;++i,--j)
        {
            if(sp[i]!=sp[j])
            {
                return false;
            }
        }
        return true;
    }
    bool isP[105];
    int main()
    {
        memset(vis,false,sizeof(vis));
        memset(isP,false,sizeof(isP));
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i  = 0;i<n;++i)
        {
            cin >> s[i];
            mp[s[i]] = i;
            if(check(s[i],m))
                isP[i] = true;
        }
        string ans;
        for(int i = 0;i<n;++i)
        {
            if(vis[i])
                continue;
            //vis[i] = true;
            string tmp = s[i];
            reverse(tmp.begin(),tmp.end());
            if(mp.find(tmp)!=mp.end()&&!vis[mp[tmp]]&&mp[tmp]!=i)
            {
                vis[i] = 1;
                ans+=s[i];
                vis[mp[tmp]] = 1;
            }
        }
        string tmp = ans;
        for(int i = 0;i<n;++i)
        {
            if(!vis[i]&&isP[i])
            {
                ans+=s[i];
                break;
            }
        }
        reverse(tmp.begin(),tmp.end());
        ans+=tmp;
        printf("%d
    ",ans.size());
        cout << ans << "
    ";
        return 0;
    }

    C. Air Conditioner

    题意:

    有个人开了一家餐馆,餐馆有一个空调,空调每秒钟有三个状态,升温,不变,降温,接下来有n个到来,对于每个顾客,给出他到来的时间,所能接受的温度下限,所能接受的温度上限,给出餐馆的起始温度,问能否通过调节使的每个顾客到来时温度都能使他满意。

    思路:

    假设现在的温度为m,它过了t秒以后所能到达的温度范围是[m-t,m+t],把这个范围与在第t秒到的顾客所能接受的温度范围取个交集,若交集为空就证明无论如何调节,都不能满足该顾客的需求。反之,一直往下去取交集即可。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    struct CU
    {
        LL t,l,h;
        bool operator<(const CU&b)const
        {
            return t<b.t;
        }
    }C[105];int n;
            LL m;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
    
            scanf("%d %lld",&n,&m);
            for(int i = 1;i<=n;++i)
            {
                scanf("%lld %lld %lld",&C[i].t,&C[i].l,&C[i].h);
            }
            LL t = 0;
            LL mx = m,mi = m;
            bool flag = true;
            for(int i = 1;i<=n;++i)
            {
                mx+=C[i].t-t;
                mi-=C[i].t-t;
                t = C[i].t;
                if(!(mx<C[i].l||mi>C[i].h))
                {
                        mi = max(mi,C[i].l);
                        mx = min(mx,C[i].h);
                }
                else
                {
                    flag = false;
                    break;
                }
               // cout << mi << " "<< mx <<"
    ";
            }
            if(flag)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }

    D. Shortest and Longest LIS

    题意:

    给你一个n以及一个表示相邻两数之间大小关系的字符串,让你求两个1-n的且满足前面大小关系的排列,一个具有最短的LIS,一个又最大的LIS。输出这两个排列。

    思路:

    dilworth定理原理我也不太懂QAQ

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn = 2e5+100;
    int a[maxn],b[maxn];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n;
            string s;
            cin >> n >> s;
            for(int i = 0;i<n;++i)
            {
                a[i] = i+1;
                b[i] = n-i;
            }
            for(int i  = 0;i<n-1;++i)
            {//cout << i<< endl;
                if(s[i]=='<'&&a[i]<a[i+1]||s[i]=='>'&&a[i]>a[i+1])
                    continue;
                else
                {
                    bool flag = false;
                    int j = 0;
                    for( j = i+1;j<n-1;++j)
                    {
                        if(s[j]=='<'&&a[j]<a[j+1]||s[j]=='>'&&a[j]>a[j+1])
                            {
                                flag = true;
                                break;
                            }
    
                    }
                        for(int l = i,r=j;l<=r;++l,--r)
                            swap(a[l],a[r]);
                    i = j;
                }
    
            }
            for(int i  = 0;i<n-1;++i)
            {
                if(s[i]=='<'&&b[i]<b[i+1]||s[i]=='>'&&b[i]>b[i+1])
                    continue;
                else
                {
                    bool flag = false;
                    int j = 0;
                    for( j = i+1;j<n-1;++j)
                    {
                        if(s[j]=='<'&&b[j]<b[j+1]||s[j]=='>'&&b[j]>b[j+1])
                            {
                                flag = true;
                                break;
                            }
    
                    }
                   // cout << i << " "<< j << endl;
                        for(int l = i,r=j;l<=r;++l,--r)
                            swap(b[l],b[r]);
                        i = j;
                }
            }
            printf("%d",b[0]);
            for(int i = 1;i<n;++i)
                printf(" %d",b[i]);
            printf("
    ");
            printf("%d",a[0]);
            for(int i = 1;i<n;++i)
                printf(" %d",a[i]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    npm install报错Error: ENOENT
    hibernate hql
    mysql授权
    撤销git reset soft head操作
    nodejs&npm等概念梳理
    Java类中中文问题
    采用MANIFEST.MF之jar报错ClassNotFoundException解法
    EChart和G2比较
    牛客OI测试赛1
    Codeforces Round #340 (Div.2)
  • 原文地址:https://www.cnblogs.com/baihualiaoluan/p/12452085.html
Copyright © 2011-2022 走看看