Codeforces Round #424 (Div. 2)A-B-C 日常訓練

題目鏈接:

點擊打開鏈接、

暫時擺這三道,後面補完在貼。


A

簡單模擬

#include<stdio.h>
#include<string.h>
const int maxn=1100;
int a[maxn];
int num[maxn];
int main(){
    int n;
    int mx=-1;
    scanf("%d",&n);
    memset(num,0,sizeof(num));
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
       // num[a[i]]++;
       if(mx<a[i]) mx=a[i];

    }
    num[0]=1;
    for(int i=0;i<n-1;i++){
        if(a[i]==a[i+1]) num[i+1]=num[i]+1,num[i]=1;
        else num[i+1]=1;
    }
    /*check num[]*/
    /*
    for(int i=0;i<n;i++){
        printf("%d ",num[i]);
    }printf("\n");
    */
    int number=0;
    for(int i=0;i<n;i++){
        if(num[i]>1) number++;
    }


//*
bool up=true;
    bool ans=true;
   if(number>1) printf("NO\n");
    else{
       for(int i=0;i<n-1;i++){
            if(a[i]<a[i+1]&&up){
                    //printf("1\n");
                    continue;
            }else if(a[i]==a[i+1]&&a[i]==mx){
                //printf("2\n");
                continue;
            }else if(a[i]>a[i+1]&&up){
               // printf("3\n");
                up=false;
            }

            else if(a[i]>a[i+1]&&!up){
                //printf("4\n");
                continue;
            }
            else{
               // printf("5\n");
                ans=false;
                break;
            }
       }
        if(ans) printf("YES\n");
        else printf("NO\n");
    }
//*/




    return 0;
}

B

#include<stdio.h>
#include<ctype.h>
#include<string.h>

const int maxn=1100;
char a[maxn],b[maxn],c[maxn];

int main(){
    scanf("%s",a);
    scanf("%s",b);
    scanf("%s",c);
    for(int i=0;i<strlen(c);i++){
        if(isalpha(c[i])==0){
            printf("%c",c[i]);
        }else if(isalpha(c[i])==2){
            for(int j=0;j<26;j++){
                if(a[j]==c[i]){
                    printf("%c",b[j]);
                    break;
                }
            }
        }else if(isalpha(c[i])==1){
            char ch=tolower(c[i]);
            for(int j=0;j<26;j++){
                if(a[j]==ch){
                    printf("%c",toupper(b[j]));
                    break;
                }
            }
        }
    }
    return 0;
}

更簡單的模擬

C題

逆向思維。

一個初始值要滿足所有的n,那麼對於任意一個b[i]全部倒推其所有可能的初始值init[i],答案一定在這裏面,檢查這些init 是否可以推出其他的n-1個分數即可,注意去重

#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
const int maxn=2100;
ll a[maxn],b[maxn];
ll pre[maxn];
ll ini[maxn];
ll bn[maxn];
int k,n;
set<ll> ans,init,bset,tmp;

bool bs(ll des){
    int l=0,r=n-1;
   // int m=(l+r)/2;
    while(l<=r){

       int m=(l+r)/2;
        if(b[m]==des){
                   // printf("b[%d]=%d\n",m,b[m]);
                    return true;
        }
        //return true;
        if(b[m]<des){
            l=m+1;
        }else if(b[m]>des){
            r=m-1;
        }
    }
    return false;
}

int main(){
    //int k,n;
    scanf("%d%d",&k,&n);

    for(int i=0;i<k;i++){
        scanf("%I64d",&a[i]);
    }
    for(int i=0;i<n;i++){
        scanf("%I64d",&b[i]);
        bset.insert(b[i]);
    }
   // for(int i=0;i<k;i++)printf("%d ",a[i]);puts("");
   // for(int i=0;i<n;i++) printf("%d ",b[i]);puts("");
    pre[0]=a[0];
    for(int i=1;i<k;i++){
        pre[i]=pre[i-1]+a[i];
    }
    //for(int i=0;i<k;i++)printf("%d ",pre[i]);puts("");
    for(int i=0;i<k;i++){
        ini[i]=b[0]-pre[i];
        init.insert(ini[i]);
    }

   // for(int i=0;i<k;i++) printf("%d ",ini[i]);puts("");
    int res=0;
    sort(b,b+n);
    for(auto it=init.begin();it!=init.end();it++){
        ll cur=*it;
        int num=0;
       // printf("cur=%d\n",cur);
       tmp.clear();
        for(int j=0;j<k;j++){
                //printf("cur+pre[%d]=%d",j,cur+pre[j]);
         //   if(bset.find(cur+pre[j])!=bset.end()){
            if(bs(cur+pre[j])){
                tmp.insert(cur+pre[j]);//就是這個地方要去重 WA了5次
                if(tmp.size()==n){
                   // ans.insert(cur);
                   res++;
                   // printf("anscur=%d\n",cur);
                    break;
                }
                continue;
            }
        }

    }
    printf("%d\n",res);
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章