Problem 2111 Min Number

Accept: 760    Submit: 1516
Time Limit: 1000 mSec    Memory Limit : 32768 KB

Problem Description

Now you are given one non-negative integer n in 10-base notation, it will only contain digits ('0'-'9'). You are allowed to choose 2 integers i and j, such that: i!=j, 1≤i<j≤|n|, here |n| means the length of n’s 10-base notation. Then we can swap n[i] and
n[j].

For example, n=9012, we choose i=1, j=3, then we swap n[1] and n[3], then we get 1092, which is smaller than the original n.

Now you are allowed to operate at most M times, so what is the smallest number you can get after the operation(s)?

Please note that in this problem, leading zero is not allowed!

Input

The first line of the input contains an integer T (T≤100), indicating the number of test cases.

Then T cases, for any case, only 2 integers n and M (0≤n<10^1000, 0≤M≤100) in a single line.

Output

For each test case, output the minimum number we can get after no more than M operations.

Sample Input

3
9012 0
9012 1
9012 2

Sample Output

9012
1092
1029

Source

“高教社杯”第三届福建省大学生程序设计竞赛

无聊找找以前写过的题目,果然还是Too naïve,第一次提交RE了,回去看看是自定义函数可能会返回让数组越界的值....改完AC了

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
int findmin(const string &s,const int &b)//查找起始点之后的最小数
{
int len=s.size(),index=b,t=s[b];
int i;
if(b==0)//前导零的情况
{
for (int i=b; i<len; i++)
{
if(s[i]<t&&s[i]>'0')
{
index=i;
t=s[i];
}
}
}
else
{
for (int i=b; i<len; i++)
{
if(s[i]<t)
{
index=i;
t=s[i];
}
}
}
return index;
}
int main (void)
{
int t,i,j,cnt,n,p,be,LEN;
string s;
cin>>t;
while (t--)
{
cin>>s>>n;
cnt=be=0;
LEN=s.size();
while (cnt<n)
{
if(be>=LEN)
break;
p=findmin(s,be);
if(s[be]==s[p])//若找到的位置本来就是自己,意味着不需要交换.
{
be++;//起始点+1
continue;
}
swap(s[be],s[p]);
cnt++;
}
cout<<s<<endl;
}
return 0;
}

最新文章

  1. [BZOJ1014][JSOI2008]火星人prefix
  2. Ubuntu14.0下安装Zend Framework 2
  3. SQL基础--序列
  4. Android-开发工具
  5. ES6 你可能不知道的事 – 基础篇
  6. 巧用section在cshtml写入layout中写入head信息 ASP.NET MVC
  7. 关于left join、right join和inner join
  8. YTU 2989: 顺序表基本运算(线性表)
  9. 局域网络ping不通
  10. 利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备
  11. 国内最简单的短视频SDK
  12. ansible笔记
  13. c++隐藏实例
  14. LeetCode 202. Happy Number (快乐数字)
  15. python之list
  16. Eclipse远程调试应用程序
  17. Office开发必备知识----为什么要释放非托管Com资源
  18. DateTime?,也是一种类型,代表DateTime或NULL两种类型,在处理空时间时比较有用
  19. JS简史
  20. [dpdk] dpdk --lcores参数

热门文章

  1. js 去除数组中的空值以及数组判断是否有重复数据
  2. ubuntu k8s 命令补全
  3. Spring IoC与DI(依赖注入)
  4. oracle 快速复制一张表,并在此创建索引,日志及并行度
  5. 2_分布式计算框架MapReduce
  6. UITableView上添加按钮,按钮点击效果延迟的解决办法
  7. python queue - 同步队列类
  8. Race condition
  9. C语言中sizeof的用法
  10. Python基础(二)——常用内置函数