首页 > Windows开发 > 详细

2021.08.19(AcWing每日一题

时间:2021-08-20 15:17:57      阅读:16      评论:0      收藏:0      [点我收藏+]

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个字母就好,然后水题

 

2021.08.19(AcWing每日一题

原文:https://www.cnblogs.com/bonel/p/15165799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!