這可以對初學者是極大的鼓勵了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 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...