您的位置:首页 > 其它

浙江工商大学15年校赛C题 我删我删,删删删 【简单模拟】

2015-03-24 10:41 211 查看
Description:
有一个大整数.不超过1000位.假设有N位.我想删掉其中的任意S个数字.使得删除S位后,剩下位组成的数是最小的.

Input:
有多组数据数据,每组数据为两行.第一行是一个大整数.第二行是个整数S,其中S小于大整数的位数. 输入以EOF结束。

Output:
对于每组输入数据,请输出其删除后的最小数.

Sample Input:
178543
4
100002
1
Sample Output:
13
2


解题思路:

删除比它下一位大的数字,删除S次即可

注意的是要对答案取出前导0

Source Code:

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <vector>
#include <algorithm>
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
#define MOD 1000000007
#define pi acos(-1.0)

using namespace std;

typedef long long           ll      ;
typedef unsigned long long  ull     ;
typedef unsigned int        uint    ;
typedef unsigned char       uchar   ;

template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}

const double eps = 1e-7      ;
const int N = 210            ;
const int M = 1100011*2      ;
const ll P = 10000000097ll   ;
const int MAXN = 10900000    ;
const int INF = 0x3f3f3f3f   ;
const int offset = 100       ;

string ch;
char Min;
int n, m;

int main() {
std::ios::sync_with_stdio(false);
int i, j, t, k, u, c, v, p, numCase = 0;

while (cin >> ch) {
n = ch.size();
cin >> m;
while (m--) {
bool flag = true;//ADD
Min = ch[0];
for (i = 1; i < n; ++i) {
if (Min > ch[i]) {
for (j = i; j <= n; ++j) {
ch[j - 1] = ch[j];
}
flag = false;//ADD
--n;
break;
} else {
Min = ch[i];
}
}
if (flag) { //ADD
--n;    //ADD
}           //ADD
}
i = 0;
for (;;) {
if (ch[i] == '0') {
++i;
continue;
}
break;
}
if (i == n) {
cout << 0 << endl;
} else {
for (; i < n; ++i) {
cout << ch[i];
}
cout << endl;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: