1321:【例6.3】删数问题(Noip1994)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 38338 通过数: 13784
【题目描述】
输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
输出新的正整数。(n不超过240位)
输入数据均不需判错。
【输入】
n
s
【输出】
最后剩下的最小数。
【输入样例】
175438
4
【输出样例】
13
时间限制: 1000 ms 内存限制: 65536 KB
样例代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
int k; //删除数字的个数
cin>>a>>k;
if (k >= a.size()) a.erase(); //如果k≥n,所有数字均被删除
else while(k > 0){ //寻找最近下降点,逐个删除
int i;
for (i=0; (i<a.size()-1) && (a[i] <= a[i+1]); ++i);
a.erase(i, 1);//删除xi
k--;
}
while(a.size() > 1 && a[0] == '0')
a.erase(0, 1);
cout<<a<<endl;
}