2021.08.19(AcWing每日一题
1.
#include#include #include #include #include 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 ){ if(s[i] 1]&&flag==0){ c=s[i-1]; flag++; } } if(flag==0){ c=s[n-1]; } flag=0; for(int i=0;i){ if(flag==0&&s[i]==c){ flag++; continue; } printf("%c",s[i]); } printf("\n"); } }
注:把贪心问题想成了dp,其实并不是dp,因为是字典序最小,所以只需要考虑最前面那个的s[i]>s[i+1]的位置就可,如果没有的话,就去掉最后面的那个字符,相同字母时,去掉一个字母字典序更小
2.
#include#include #include #include #include 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 ){ for(int j=0;j ){ char s=‘a‘+j; printf("%c",s); } } for(int i=0;i ){ char s=‘a‘+i; printf("%c",s); } printf("\n"); } }
注:只是注意这是前k个字母就好,然后水题
原文:https://www.cnblogs.com/bonel/p/15165799.html