题意:
一个不超过100位的大整数,去掉其中k位之后剩余的数按照原来的顺序组合成新的整数,求新的整数最小的值为多少
例如 :
45602 去掉两位,结果为402,
12045 去掉两位 结果为45(新数前导零删除)
10204055 去掉三位 结果为55
思路:
将删除k位转换成从原来的整数n位中取 n-k位
ac代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
int main(){
int t,k;
cin>>t; //t个测试样例
while(t--){
string ss;
cin>>k>>ss; //去除k位,大整数ss(使用字符串表示)
int l=-1,r=k+1,min1=99999999,flag=0; //l表示左边标识,r代表右边标识,min1标识找到此轮中最小的一个
//flag标识是否是前导零
while(r<=ss.size()){
for(int i=l+1;i<r;i++){ //找到这个区域中最小的一个
if(min1>ss[i]-'0'){
min1=ss[i]-'0';
l=i;
}
}