2021.08.15(AcWing第十二场周赛+第十一场周赛

1.3803. 数组去重 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1010;
int a[maxx]={0};
int b[maxx]={0};
int num[maxx]={0};
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        memset(a,0,sizeof a);
        memset(b,0,sizeof b);
        memset(num,0,sizeof num);
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        int j=0;
        for(int i=n-1;i>=0;i--){
            if(b[a[i]]==0){
                num[j++]=a[i];
                b[a[i]]++;

            }
        }
        printf("%d\n",j);
        memset(b,0,sizeof b);
        for(int i=j-1;i>=0;i--){

                printf("%d ",num[i]);

        }
        printf("\n");
    }
}
View Code

注:注意数组的初始化问题

2.3804. 构造字符串 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1e5+10;
char a[maxx];
int s[maxx]={0};
char ans[maxx];
int main(){
    int t;
    scanf("%d",&t);

    while(t--){
        memset(s,0,sizeof s);
        int n,k;
        scanf("%d %d",&n,&k);
        getchar();
        for(int i=0;i<n;i++){
            scanf("%c",&a[i]);
            s[a[i]-'a']++;
        }
        if(k>n){
            for(int i=0;i<n;i++){
                printf("%c",a[i]);
            }
            char p='a';
            for(int i=0;i<30;i++){
                if(s[i]!=0){
                    p+=i;
                    break;
                }
            }
            for(int i=0;i<k-n;i++){
                printf("%c",p);
            }
            printf("\n");
            continue;
        }
        char p='a';
        int flagi=0;
        for(int i=k-1;i>=0;i--){
            int flag=0;
            for(int j=a[i]-'a'+1;j<30;j++){
                if(s[j]!=0){
                    flag++;
                    flagi=i;
                    p+=j;
                    break;
                }
            }
            if(flag!=0){
                break;
            }
        }
        char minn='a';
        for(int i=0;i<30;i++){
                if(s[i]!=0){
                    minn+=i;
                    break;
                }
        }
        for(int i=0;i<=flagi-1;i++){
            printf("%c",a[i]);
        }
        printf("%c",p);
        for(int i=1;i<k-flagi;i++){
            printf("%c",minn);
        }
        printf("\n");
    }
}
View Code

注:主要是分成两种情况:

1)k>n:这样就输出n个,剩下的k-n个就直接输出字符集中最小的字母

2)k<=n:从后往前找到底是哪个字母使得t的字典序大于s的字典序,找到以后后面的字符都是字符集中最小的那个字母

3.3795. 计算abc - AcWing题库

#include<iostream>
#include<algorithm>
#include <set>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
    int a[5]={0};
    scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
    sort(a,a+4);
    printf("%d %d %d\n",a[3]-a[2],a[3]-a[1],a[3]-a[0]);
}
View Code

注:水了水了

4.

posted @ 2021-08-15 16:13  bonel  阅读(14)  评论(0编辑  收藏  举报