午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Codeforces Round #705 (Div. 2)C. K-beautiful Strings(貪心)

 路人甲Java 2022-12-14 發(fā)布于北京

https:///contest/1493/problem/C

從后往左找一個(gè)需要加大的地方,枚舉這個(gè)地方加大多少,每次都判定后面是否能湊成功即可

  1 #define IO std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  2 #define bug(x) cout<<#x<<" is "<<x<<endl
  3 #include <bits/stdc++.h>
  4 #define iter ::iterator
  5 using namespace  std;
  6 typedef long long ll;
  7 typedef pair<int,ll>P;
  8 #define pb push_back
  9 #define mk make_pair
 10 #define se second
 11 #define fi first
 12 #define rs o*2+1
 13 #define ls o*2
 14 const ll mod=1e9+7;
 15 const int N=2e5+5;
 16 int T,n,k;
 17 
 18 char s[N],t[N];
 19 
 20 int a[N][26],b[26];
 21 
 22 int check(int i,int x){
 23     int f=0,y=0;
 24     for(int j=0;j<26;j++){
 25         if(j==x){
 26             b[j]=a[i-1][j];
 27             b[j]%=k;
 28             b[j]=k-b[j];
 29             b[j]--;
 30             if(b[j]<0){
 31                 f=1;
 32                 break;
 33             }
 34             b[j]%=k;
 35             y+=b[j];
 36             continue;
 37         }
 38         b[j]=a[i-1][j];
 39         b[j]%=k;
 40         b[j]=k-b[j];
 41         b[j]%=k;
 42         y+=b[j];
 43     }
 44     if(f)return -1;
 45     int z=n-i-y;
 46     if(z<0||z%k)return -1;
 47     return z;
 48 }
 49 
 50 
 51 int main(){
 52     //IO;
 53     cin>>T;
 54     while(T--){
 55         cin>>n>>k;
 56         scanf("%s",s+1);    
 57         for(int i=1;i<=n;i++){
 58             for(int j=0;j<26;j++)a[i][j]=0;
 59         }
 60         for(int i=1;i<=n;i++){
 61             for(int j=0;j<26;j++){
 62                 a[i][j]=a[i-1][j];
 63             }
 64             int x=s[i]-'a';
 65             a[i][x]++;
 66         }
 67         int f2=0;
 68         for(int i=0;i<26;i++){
 69             if(a[n][i]%k){
 70                 f2=1;
 71                 break;
 72             }
 73         }
 74         if(!f2){
 75             printf("%s\n",s+1);
 76             continue;
 77         }
 78         int f=0;
 79         for(int i=n;i>=1;i--){
 80             if(s[i]=='z')continue;
 81             int x=s[i]-'a';
 82             int z=0,v=0;
 83             for(int p=x+1;p<26;p++){
 84                 z=check(i,p);
 85                 if(z!=-1){
 86                     v=p;
 87                     f=1;
 88                     break;
 89                 }          
 90             }
 91             if(!f)continue;
 92             for(int j=1;j<i;j++)t[j]=s[j];
 93             t[i]=v+'a';
 94             for(int j=i+1;j<=i+z;j++){
 95                 t[j]='a';
 96             }
 97             int h=i+z;
 98             for(int j=0;j<26;j++){
 99                 for(int w=1;w<=b[j];w++){
100                     t[++h]=j+'a';
101                 }
102             }
103             break;
104         }
105         if(f){
106             t[n+1]='\0';
107             printf("%s\n",t+1);
108         }
109         else puts("-1"); 
110     }
111 
112 }

 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多