1134 整數去位 貪心

2021-07-23 05:29:14 字數 808 閱讀 5744

題目描述

鍵盤輸入乙個高精度的正整數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 表示第二行序列中數字的個數 第二...