題目描述
鍵盤輸入乙個高精度的正整數n,去掉其中任意m個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和m尋找一種方案使得剩下的數字組成的新數最小。輸出組成的新的正整數。
輸入資料均不需判錯。如果去掉了某幾個位後得到的新整數開頭為0,保留0。
輸入:505 1
輸出: 05
輸入第一行為高精度正整數n(n的長度不超過10^6位)
第二行為m(0<=m<=n的長度) 輸出
去掉m位後的最小新數。
樣例輸入
82386782 3
樣例輸出
23672
思路:對於此題貪心的策略就是從i到i+k這一段中,如果這裡面有比ai小的j,就直接把j前面的數全部去掉也就是k-=(j-i);然後再已這個數為起點繼續掃瞄i到i+k;
但是考慮到時間複雜度的問題,不斷地這樣掃肯定不行,
所以,我們可以預處理出乙個數的後面比他小的數的下標。這樣經過預處理就能輕易掃瞄
**#include#include#include#include#includeusing namespace std;
#includeconst int inf =10000000;
string a;
int b[1000005];
int main()
b[i]=t;}}
int i=0;
int flag=0;
while(k>0)
if(!flag)
printf("%c",a[i++]);
else flag=0;
}while(i
42 整數去重
總時間限制 1000ms 記憶體限制 65536kb 描述 給定含有n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重複出現的數,只保留該數第一次出現的位置,刪除其餘位置。輸入 輸入包含兩行 第一行包含乙個正整數n 1 n 20000 表示第二行序列中數字的個數 第二行包含...
1117 整數去重
時間限制 1000 ms 記憶體限制 65536 kb 提交數 8459 通過數 4846 給定含有n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重複出現的數,只保留該數第一次出現的位置,刪除其餘位置。輸入包含兩行 第一行包含乙個正整數n 1 n 20000 表示第二行序...
1117 整數去重
時間限制 1000 ms 記憶體限制 65536 kb 題目描述 給定含有n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重複出現的數,只保留該數第一次出現的位置,刪除其餘位置。輸入 輸入包含兩行 第一行包含乙個正整數n 1 n 20000 表示第二行序列中數字的個數 第二...