具有紀念意義的一道水題

2022-09-20 21:22:07 字數 1406 閱讀 4287

這可以對初學者是極大的鼓勵了wakaka =_=!

就是\(mex\)函式:\(\)最小沒出現的非負整數 比如\(mex\\} = 0

給我們乙個\)a\(陣列,問可以選a前\)k\(個數字,

將他們的\)mex\(放進\)b$,使 \(b\) 陣列的字典序最大

我的第一次想法,因為之前見過乙個arc的b題是個貪心,和這個很像,所以我們想到了那裡,用\(cnt\)陣列來記錄每個值出現的次數,然後我們可以這樣,找到第乙個斷開的位置 idx,將這個數字插入\(b\) 陣列一定會使當前的字典序最大且不影響後面的

也就是

int get(int start,vector&a)

問題1:如何判斷當前的區域\([l,r]\)是包含\(=idx-1\)的下標 \(j\),然後直接找\([j,i]\)的區域是不是包含,然後少了什麼,再往前尋找。

int n,m=0;

cin >> n;

vectora(n),cnt(n+1,0);

for(int i=0;i> a[i],cnt[a[i]]++;

// 開始看錯題意了,以為倒著選

reverse(a.begin(),a.end());

vectorb;

for(int i=n-1;i>=0;i--)

if(mini樣例過了,但是\(wawa\)了,我一想可能是判斷的時候和找到後的操作出啦岔子,然後我們開始找邊界,debug,最後實在想不出來,出去跑步了,但把問題確定在了\(如何找到當前區間的mex值等於我的idx\),

忽然拿起糾錯本,畫著畫著,就發現了我們可以開乙個陣列,來記錄當前出現了那個數字,只要當前陣列的\(mex\)不是我們的idx

我們就繼續往後面找,最後找到後,將這個區域的數值出現的次數減去。

最後一次wa就直接吃飯跑步啦

scanf("%d",&n);

vectora(n),id(n+1,0);

for(int i=0;ib(n);

vectorst(n+1);

int cnt=0;

for(int i = 0;i

b[cnt++] = idx;

for(int jj = i;jj <= j;jj ++) st[a[jj]]--,id[a[jj]]--;

i = j;

}printf("%d\n",cnt);

for(int i=0;i

printf("\n");

1503171912 ny 一道水題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...

nyoj525 一道水題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...

NYOJ 525 一道水題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...