COCI11 12 4 刪數遊戲 貪心 棧

2021-08-11 04:04:17 字數 780 閱讀 2975

給出乙個n位數字串,刪除任意k位,使剩下的數最大.。

第1行:2個整數n和k(1<=k<=n<=500000)

第2行:n個數字(可能為0)

第1行:1個可行到的最大的數

10 4

4177252841

剛看到題目時感覺是一道水題…然後迅速交上去t掉了…

仔細看看資料範圍,發現常規做法已經達到了o(k

n2

)o(kn^2)

o(kn2)

的複雜度了,顯然是會超時的。

這時候就需要資料結構的優化了~

我們知道之前要刪去乙個數的時候要先刪去乙個數,再將前面的數乙個乙個往前移。有沒有方法使它不需要移動呢。顯然,我們可以用棧這個資料結構啦~

最後只需要從前往後加入棧內,遇到乙個數與前面的數不保持遞增狀態時就將棧內的元素刪去即可。

#include

#include

#include

#include

#include

using

namespace std;

char b[

500005

],a[

500005];

//陣列模擬棧

int n,k,task=

1,t1;

intmain()

for(

int i=

1;i<=n-k;i++

)printf

("%c"

,b[i]);

}

刪數問題(貪心)

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定n 位 n 100 正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n 位正整數a和正整數k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。對於給定的正整...

貪心 刪數問題

題目描述 鍵盤輸入乙個高精度的正整數n 240位 去掉其中任意s個數字後剩下的數字按原左右次序將組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案,使得剩下的數字組成的新數最小。n s 最後剩下的最小數 樣例輸入 178543 4樣例輸出13 這題貪心是要找乙個單調增的數,即保證較小數總在高位...

貪心 刪數問題

problem description 鍵盤輸入乙個高精度的正整數n 100位 去掉其中任意s個數字後剩下的數字按照原來的左右次序組成乙個新的正整數。程式設計對給定的n與s,尋找一種方案,使得剩下的數字組成的新數最小。input 輸入有多組 每組包括原始數n,要去掉的數字數s output 輸出去掉...