時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:2 描述
請在整數 n 中刪除m個數字, 使得餘下的數字按原次序組成的新數最大,
比如當n=92081346718538,m=10時,則新的最大數是9888
輸入
第一行輸入乙個正整數t,表示有t組測試資料
每組測試資料佔一行,每行有兩個數n,m(n可能是乙個很大的整數,但其位數不超過100位,並且保證資料首位非0,m小於整數n的位數)
輸出每組測試資料的輸出佔一行,輸出剩餘的數字按原次序組成的最大新數
樣例輸入
292081346718538 10
1008908 5
樣例輸出
988898
【分析】貪心
經典刪數問題。 為保證最終得到的數最大,進行以下操作:
(1)刪除:對輸入數字進行掃瞄時,若找到相鄰兩位(記為ab)是嚴格單調遞增的,則刪除a保留b;若當前數各數字嚴格單調不增,則刪除最後一位。以保證刪除對輸入數字的"損失"最小;
(2)字首0處理:若刪除數字完成後的數字前面有字首0,輸出時不應輸出,因此需要找到第乙個非0數字,從該位開始輸出。特別地,如果整個數各位均為0,則輸出"0"。
#include #include #define maxlen 105
int t,m;
char n[maxlen];
int main()
{ int i,j,len;
int is_del; //記錄每輪掃瞄是否找到嚴格單調遞增的子串行"ab"
scanf("%d",&t);
while(t--)
{ scanf("%s %d",n,&m);
len=strlen(n);
while(m>0)
{ for(i=0;i
貪心 NYOJ448 尋找最大數
時間限制 1000 ms 記憶體限制 65535kb 難度 2 描述 請在整數 n 中刪除 m個數字 使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538 m 10 時,則新的最大數是 9888 輸入 第一行輸入乙個正整數 t,表示有 t組測試資料 每組測試資料佔一行,每行有...
nyoj448尋找最大數
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...
NYOJ 448 尋找最大數
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...