題意:前面說了一堆廢話,就是說給你一個字符串,全部由數字組成,讓你在裡面刪除n個數,最後得到的數越小越好。
思路:此題和NYOJ上的一道題基本上一樣,不過NYOJ上讓求得是最大數,這裡求的是最小數。思路一樣,嚴格來說,這道題數據有點水了,主要是字符串太長,數據變態點的話,我的方法可能會tle。我的思路是不斷的選出最小數,選的范圍一直改變。具體來說,設pos=0,最後剩下的數的長度為len,字符串的長度為Len,則第一次篩選的范圍是從pos到Len-len+1,在這之間選出一個最小的數,並且是pos的值等於這個最小數的位置,len--。這樣循環操作,最後找出即可。
代碼:
[cpp]
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
using namespace std;
const int N = 120005;
int main(){
//freopen("1.txt","r",stdin);
string ss;
while(cin>>ss){
int k;
scanf("%d",&k);
int len = ss.size();
int pos = 0,leftlen = len - k,num[N],cnt = 0;
while(leftlen > 0){
int mmin = 100;
for(int i = pos;i < len-leftlen+1;++i){
if((int)(ss[i]-'0') < mmin){
mmin = (int)(ss[i]-'0');
pos = i;
}
}
leftlen--;
pos++;
num[cnt++] = mmin;
}
int kk;
for(int i = 0;i < cnt;++i){
if(num[cnt]){
kk = i;
break;
}
}
for(int i = kk;i < cnt;++i)
printf("%d",num[i]);
printf("\n");
}
return 0;
}
作者:wmn_wmn