2021.08.19(AcWing每日一题

1.3806. 最小化字符串 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxx=2e5+10;
char s[maxx];
char c;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        scanf("%s",&s);
        if(n==1){
            printf("%c",s[0]);
            printf("\n");
            continue;
        }
        int flag=0;
        for(int i=1;i<n;i++){
            if(s[i]<s[i-1]&&flag==0){
                c=s[i-1];
                flag++;
            }
        }
        if(flag==0){
            c=s[n-1];
        }
        flag=0;
        for(int i=0;i<n;i++){
            if(flag==0&&s[i]==c){
                flag++;
                continue;
            }
            printf("%c",s[i]);
        }
        printf("\n");
    }
}
View Code

注:把贪心问题想成了dp,其实并不是dp,因为是字典序最小,所以只需要考虑最前面那个的s[i]>s[i+1]的位置就可,如果没有的话,就去掉最后面的那个字符,相同字母时,去掉一个字母字典序更小

2.3807. 构造字符串 - AcWing题库

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int maxx=2e5+10;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,k;
        scanf("%d %d",&n,&k);
        for(int i=0;i<n/k;i++){
            for(int j=0;j<k;j++){
                    char s='a'+j;
                printf("%c",s);
            }
        }
        for(int i=0;i<n-n/k*k;i++){
            char s='a'+i;
            printf("%c",s);
        }
        printf("\n");
    }
}
View Code

注:只是注意这是前k个字母就好,然后水题

 

posted @ 2021-08-20 11:32  bonel  阅读(16)  评论(0编辑  收藏  举报