1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //struct node{
  4. // int pos,dis;
  5. // char num;
  6. //}s[1005];
  7. //bool cmp(node a,node b){
  8. // if(a.num==b.num)return a.pos<b.pos;
  9. // return a.num<b.num;
  10. //}
  11. int n,k;
  12. char cc[1005];
  13. int main(){
  14. scanf("%d%d\n",&n,&k);
  15. // for(int i=1;i<=n;i++){
  16. // scanf("%c",&cc[i]);
  17. // s[i].num=cc[i];
  18. // s[i].pos=i;
  19. //
  20. // }
  21. scanf("%s",cc);
  22. if(k==0){
  23. for(int i=0;i<n;i++)printf("%c",cc[i]);
  24. return 0;
  25. }
  26. //for(int i=1;i<=n;i++)printf("%c",cc[i]);
  27. //sort(s+1,s+1+n,cmp);
  28. //int q=0;
  29. for(int i=0;i<=n;i++){
  30. //q++;
  31. int index=0;
  32. bool flag=0;
  33. int tmp=cc[i];
  34. for(int j=i+1;j<=i+k&&j<n;j++){
  35. if(tmp>cc[j]){
  36. tmp=cc[j];
  37. index=j;
  38. flag=1;
  39. }
  40. }
  41. if(flag){
  42. for(int j=index;j>=1;j--){
  43. if(cc[j]<cc[j-1]){
  44. swap(cc[j],cc[j-1]);
  45. k--;
  46. }
  47. if(k<=0)break;
  48. }
  49. flag=0;
  50. }
  51. }
  52. for(int i=0;i<n;i++)printf("%c",cc[i]);
  53. return 0;
  54. }
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <iostream>
  6. using namespace std;
  7. #define ll long long
  8. const int N=1e6+7,inf=2e9+7;
  9. int head[N],go[N],nxt[N],cnt;
  10. void add(int u,int v){
  11. go[++cnt]=v;
  12. nxt[cnt]=head[u];
  13. head[u]=cnt;
  14. }
  15. int n,s[N];
  16. ll k;
  17. char c[N];
  18. int query(int x){
  19. int ans=0;
  20. for(int i=x;i>0;i-=i&-i){
  21. ans+=s[i];
  22. }
  23. return ans;
  24. }
  25. void pluss(int x,int a){
  26. for(int i=x;i<=n;i+=i&-i){
  27. s[i]+=a;
  28. }
  29. }
  30. int ans[N];
  31. int main(){
  32. //freopen("escape.in","r",stdin);freopen("escape.out","w",stdout);
  33. scanf("%lld%lld",&n,&k);
  34. scanf("%s",c+1);
  35. for(int i=n;i>=1;i--){
  36. add(c[i]-'a'+1,i);pluss(i,1);
  37. }
  38. for(int tmp=0,i=1;i<=n;i++){
  39. for(int u=1;u<=26;u++,tmp=0){
  40. if(!head[u])continue;
  41. if((tmp=query(go[head[u]]-1))<=k){
  42. pluss(go[head[u]],-1);
  43. k-=tmp;
  44. head[u]=nxt[head[u]];
  45. ans[i]=u;
  46. break;
  47. }
  48. }
  49. }
  50. for(int i=1;i<=n;i++)printf("%c",ans[i]+'a'-1);
  51. return 0;
  52. }

版权声明:本文为zdxx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zdxx/p/13764285.html