• Codeforces Round #269 (Div. 2) A,B,C,D


    CodeForces - 471A

    首先要有四个数相等,然后剩下两个数不同就是Bear,否则就是Elephant。

    #include <bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> PII;
    
    int num[10];
    int a;
    
    int main()
    {
        memset(num,0,sizeof(num));
        for(int i=1;i<=6;i++)
        {
            scanf("%d",&a);
            num[a]++;
        }
        bool flag=false;
        for(int i=1;i<=9;i++){
            if(num[i]>=4){
                num[i]-=4;
                flag=true;
                break;
            }
        }
        if(flag){
            for(int i=1;i<=9;i++){
                if(num[i]==2){
                    puts("Elephant");
                    return 0;
                }
            }
            puts("Bear");
        }
        else{
            puts("Alien");
        }
        return 0;
    }
    

    CodeForces - 471B

    先要判断满足,然后sort完本身是一种,然后交换一次又是一种,标记掉,再交换,就有三种了。

    #include <bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> PII;
    int tp;
    int num[2010];
    int n;
    struct asd{
        int id;
        int w;
    };
    asd a[2010];
    bool cmp(asd x,asd y){
        if(x.w==y.w) return x.id<y.id;
        return x.w<y.w;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i].w);
            num[a[i].w]++;
            a[i].id=i;
        }
        sort(a+1,a+n+1,cmp);
        int sum=1;
        for(int i=1;i<=2000;i++){
            if(num[i]){
                sum*=num[i];
                if(sum>=3){
                        puts("YES");
                        for(int i=1;i<=n;i++)
                            printf("%d ",a[i].id);
                        puts("");
                        for(int i=1;i<=n;i++){
                            if(i+1<=n){
                                if(a[i].w==a[i+1].w){
                                    printf("%d %d ",a[i+1].id,a[i].id);
                                    tp=i;
                                    i++;
                                }
                                else
                                    printf("%d ",a[i].id);
                            }
                            else
                                printf("%d ",a[i].id);
                        }
                        puts("");
                        for(int i=1;i<=n;i++){
                            if(i+1<=n){
                                if(a[i].w==a[i+1].w&&i!=tp){
                                    printf("%d %d ",a[i+1].id,a[i].id);
                                    i++;
                                }
                                else
                                    printf("%d ",a[i].id);
                            }
                            else
                                printf("%d ",a[i].id);
                        }
                        return 0;
                }
            }
        }
        puts("NO");
        return 0;
    }

    CodeForces - 471C

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> PII;
    int main()
    {
        LL n;
        int k=0;
        scanf("%lld",&n);
        for(LL i=3-n%3;; i+=3)
        {
            if((2*(n+i))<(3*i*(i+1))) break;
            k++;
        }
        printf("%d
    ",k);
        return 0;
    }

    CodeForces - 471D

    思路:

    先特判掉m=1的时候,因为只要满足变化规律匹配就OK,所以相邻做个差,得到两个新串,然后就是求b串在a串里出现的次数(注意这个次数aa在aaa中出现2次),KMP即可;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> PII;
    const int N=2e5+10;
    int n,m;
    int a[N],b[N];
    int a_num,b_num;
    int Next[N];
    
    void GetNext()
    {
        int i=0,j=-1;
        Next[0]=-1;
        while(i<b_num){
            if(j==-1||b[i]==b[j])
                Next[++i]=++j;
            else
                j=Next[j];
        }
    }
    
    int KMP()
    {
        GetNext();
        int ans=0;
        int i=0,j=0;
        while(i<a_num){
            if(j==-1||a[i]==b[j])
            {
                i++;
                j++;
                if(j==b_num){
                    j=Next[j];
                    ans++;
                }
            }
            else
                j=Next[j];
        }
        return ans;
    }
    
    int main()
    {
        int pre,x;
        scanf("%d%d",&n,&m);
        if(m==1){
            printf("%d
    ",n);
            return 0;
        }
        a_num=b_num=0;
        scanf("%d",&pre);
        for(int i=2;i<=n;i++){
            scanf("%d",&x);
            a[a_num++]=x-pre;
            pre=x;
        }
        scanf("%d",&pre);
        for(int i=2;i<=m;i++){
            scanf("%d",&x);
            b[b_num++]=x-pre;
            pre=x;
        }
        printf("%d
    ",KMP());
        return 0;
    }
    
    




  • 相关阅读:
    利用print2flashsetup.exe文档转swf
    Linux 脚本内容指定用户执行
    第一讲:网络协议概述
    第三讲:ifconfig:最熟悉又陌生的命令行
    第2讲 | 网络分层的真实含义是什么?
    Fiddler -工具使用介绍(附:拦截请求并修改返回数据)(转)
    Fiddler 抓包工具总结(转)
    网络抓包wireshark(转)
    Axure RP 授权码
    第6堂视频课:看到词句就会读-下
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777430.html
Copyright © 2020-2023  润新知