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;
}





原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777430.html