FZU 2111 Min Number
2014-11-23 23:03
344 查看
J - Min Number
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status Practice FZU
2111
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
39012 09012 19012 2
Sample Output
901210921029
题意:
找出最小的字符串,要求在交换的范围内;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Min;
int main() {
int n;
string a;
int b;
int k;
int kase;
//scanf("%d",&n);
cin >> n;
while (n--) {
cin>>a;
cin>>b;
int len = a.length();
// cout << len;
kase = 0;
for (int i = 0; i < len; i++) {
if (kase >= b) break;
Min = '9' + 1; //记得要加上1
for (int j = len - 1; j >= i; j--) {
if(Min > a[j] && (a[j] != '0' || i)) {
Min = a[j];
k = j;
}
}
if (a[i] > a[k]) {
swap(a[i],a[k]);
++kase;
}
//if (kase >= b) break;
}
cout << a <<endl;
}
}
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status Practice FZU
2111
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
39012 09012 19012 2
Sample Output
901210921029
题意:
找出最小的字符串,要求在交换的范围内;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Min;
int main() {
int n;
string a;
int b;
int k;
int kase;
//scanf("%d",&n);
cin >> n;
while (n--) {
cin>>a;
cin>>b;
int len = a.length();
// cout << len;
kase = 0;
for (int i = 0; i < len; i++) {
if (kase >= b) break;
Min = '9' + 1; //记得要加上1
for (int j = len - 1; j >= i; j--) {
if(Min > a[j] && (a[j] != '0' || i)) {
Min = a[j];
k = j;
}
}
if (a[i] > a[k]) {
swap(a[i],a[k]);
++kase;
}
//if (kase >= b) break;
}
cout << a <<endl;
}
}
相关文章推荐
- FZU 2089 数字游戏
- FZU 2027 单词问题
- FZU 2136 取糖果
- FZU - 2115 多项式积分
- FZU 2104 (13.11.28)
- fzu 1914 Funny Positive Sequence
- fzu 2034 Password table(水题)
- fzu 2102 Solve equation(水题)
- FZU2132 - LQX的作业(概率论)
- fzu 2148 Moon Game
- FZU 2108 MOD problem
- FZU 2035
- fzu2038
- FZU 2156 Climb Stairs dp
- FZU 2152 文件系统
- FZU1894 志愿者选拔 --单调队列
- FZU 1753 Another Easy Problem 解题报告(素因子统计)
- fzu 2171 防守阵地 II
- fzu 2087并查集的运用求最小生成树的等效边
- Fzu 2113 Jason的特殊爱好 (数位dp)