zoukankan      html  css  js  c++  java
  • Codeforces Round #401 (Div. 2)【A,B,C,D】

    最近状态极差。。水题不想写,难题咬不动。。哎,CF的题那么简单,还搞崩了= =、真是巨菜无比。

    Codeforces777A

    题意:略。
    思路:
    构造出3!次变换,然后输出就好。
    Code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int a[6][4]={{1,2,3},{2,1,3},{2,3,1},{3,2,1},{3,1,2},{1,3,2}};
    
    int main()
    {
        int n,x;
        scanf("%d",&n);
        scanf("%d",&x);
        n%=6;
        int ans=a[n][x];
        ans--;
        printf("%d
    ",ans);
        return 0;
    }
    
    


    Codeforces777B

    题意:

    比较一下,小的数字的那个人要打一下。求第二串的最少,第一串的最多。

    思路:(弱弱觉得有点意思)

    两个数组,先排下序.

    (1)我要少一些,我从大的去匹配对方,而且先与对方大的去匹配最优,如果不行,最小的来匹配。

    (2)我要多一些,那么我小的尽可能去贴小的,同理不行的话,我拿最大的过去

    Code:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    char s1[1010],s2[1010];
    int s[1010];
    int m[1010];
    int n;
    
    void solve1()
    {
        int k1=0,k2=0;
        int t1=n-1,t2=n-1;
        int ans1=0;
        while(k1<=t1&&k2<=t2)
        {
            if(m[t2]>=s[t1])
            {
                t1--;
                t2--;
            }
            else
            {
                t1--;
                k2++;
                ans1++;
            }
        }
        printf("%d
    ",ans1);
    }
    
    void solve2()
    {
        int k1=0,k2=0;
        int t1=n-1,t2=n-1;
        int ans2=0;
        while(k1<=t1&&k2<=t2)     //小的贴小的,不行的话我最大的贴小的。
        {
            if(s[k1]<m[k2])
            {
                k1++;
                k2++;
                ans2++;
            }
            else
            {
                t1--;
                k2++;
            }
        }
        printf("%d
    ",ans2);
    }
    
    int main()
    {
        scanf("%d",&n);
        scanf("%s%s",s1,s2);
        for(int i=0;i<n;i++)
            s[i]=s1[i]-'0';
        for(int i=0;i<n;i++)
            m[i]=s2[i]-'0';
        sort(s,s+n);
        sort(m,m+n);
        solve1();
        solve2();
        return 0;
    }
    /*
    4
    1234
    2345
    */


    Codeforces777C:

    就是直接搞就好了,对于每列可以尺取,也可以拿个临时变量作为当前最远位置,这里是预处理出一个数组存每个位置的最远距离。

    Code

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    vector<int>xs[100010];
    int num[100010];
    int n,m;
    
    void solve()
    {
        for(int i=0;i<m;i++)
        {
        	int tmp=-1;
        	int L;
        	for(int j=0;j<xs[i].size();j++)
        	{
        		int a=xs[i][j];
        		if(tmp==-1)
        			L=j+1;
        		else if(tmp>a)
        		{
        			num[L]=max(num[L],j);
        			L=j+1;
    			}
    			tmp=a;
    		}
    		num[L]=max(num[L],n);
    	}
    
    	int tmp=-1;
    	for(int i=1;i<=n;i++)
    	{
    		num[i]=max(num[i],tmp);
    		tmp=max(num[i],tmp);
    	}
    }
    
    int main()
    {
        int x,y;
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                {
                    scanf("%d",&x);
                    xs[j].push_back(x);
                }
        solve();
    	int Q;
        scanf("%d",&Q);
        while(Q--)
        {
            scanf("%d%d",&x,&y);
            if(num[x]>=y)
                puts("Yes");
            else
                puts("No");
        }
        return 0;
    }

    Codeforces777D:

    大水题。。

    Code:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    vector<char>xs[500010];
    int n;
    int len[500010];
    char ss[500010];
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%s",ss);
            int yy=strlen(ss);
            for(int j=0;j<yy;j++)
                xs[i].push_back(ss[j]);
        }
        int t1,t2;
        len[n-1]=xs[n-1].size();
        for(int i=n-2;i>=0;i--)
        {
            t1=0;t2=0;
            bool flag=true;
            if(len[i+1]==1)
            {
                len[i]=1;
                continue;
            }
            while(t1<len[i+1]&&t2<xs[i].size())
            {
                if(xs[i+1][t1]==xs[i][t2])
                {
                    t1++;
                    t2++;
                }
                else if(xs[i+1][t1]>xs[i][t2])
                {
                    len[i]=xs[i].size();
                    flag=false;
                    break;
                }
                else
                    break;
            }
            if(flag)
                len[i]=t2;
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<len[i];j++)
                cout<<xs[i][j];
            puts("");
        }
        return 0;
    }
    /*
    3
    #sima
    #simb
    #sima
    */


  • 相关阅读:
    机器学习
    机器学习
    JavaWeb之tomcat安装、配置与使用(一)
    Tomcat安装、配置和部署笔记
    Java配置----JDK开发环境搭建及环境变量配置
    安装SQL2012
    SQLServer 数据库变成单个用户后无法访问问题的解决方法
    临时记录
    SQL Server 动态生成数据库所有表Insert语句
    SQL2000查看表的大小
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777403.html
Copyright © 2011-2022 走看看