P3210 HNOI2010 取石頭遊戲

2022-09-17 00:36:11 字數 1377 閱讀 9724

題目鏈結

博弈論好題!

但是還沒有完全弄懂...

主要的思想就是判掉「上三角」的情況,因為這種情況看起來比較劣,大家會把它放最後再選,並且一定會連續地選,即「先手」選第乙個和第三個,「後手」選第二個.(理性理解失敗,只能感性理解)

處理掉「上三角」以後,就可以直接從大到小選了。

然後會發現樣例都 wa 了。這是因為邊界可能出現靠邊的位置比較大的情況,而這時如果有偶數個,那麼肯定留在最後「被迫」選擇;如果有奇數個,那麼最靠裡的那個不會受到影響。

值得注意的是,兩邊還可能出現「下三角」的情況,這時需要我們先拿走「向下」的那部分。

**(棧):

signed main() 

bool flag = false;

for (register int i = 1; i <= n; ++i) else

continue;

} stk[++stop] = v[i];

while (stop > 2 && stk[stop - 1] >= stk[stop] && stk[stop - 1] >= stk[stop - 2])

--stop, stk[stop] = stk[stop + 1] + stk[stop - 1] - stk[stop], --stop, stk[stop] = stk[stop + 1]; }

while (top > 1 && tmp[top] >= tmp[top - 1]) h[++htot] = tmp[top], --top;

if (top <= 1) else

if (top & 1) h[++htot] = tmp[top];

} int st = 1;

while (st < stop && stk[st] >= stk[st + 1]) h[++htot] = stk[st], ++st;

if (stop - st + 1 <= 1) else

if ((stop - st + 1) & 1) h[++htot] = stk[st];

} sort(h + 1, h + 1 + htot);

int tp = 1;

for (register int i = htot; i; --i)

printf("%lld %lld\n", (cha + sum) / 2, (sum - cha) / 2);

return 0;

}

劉隊的簡化版**(雙向鍊錶):

int main()

printf("%lld %lld",(sum+val)/2,(sum-val)/2);

return 0;

}

P3203 HNOI2010 彈飛綿羊

題目大意 有n個裝置,每個裝置設定初始彈力係數ki,當達到第i個裝置時,會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則被彈飛。求從第i個裝置起步時,被彈幾次後會被彈飛。帶修改操作,下標0開始 分析 開始打算倒著跑一遍記錄每個位置彈飛要多少次,但是發現這樣做修改操作複雜度 為了減少...

P3203 HNOI2010 彈飛綿羊

某天,lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,lostmonkey在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當綿羊達到第i個裝置時,它會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則綿羊被彈飛...

P3203 HNOI2010 彈飛綿羊

p3203 hnoi2010 彈飛綿羊 本來以為是個水題,其實還是有思維性的 lct 上操作和模板一樣,顯然我們維護子樹大小 開始是想 link x,x val x 當 x val x n 時就不連,然後查詢 x 時就查詢右子樹大小 反例就不舉了隨手就是個反例吧反正這種辦法是錯的 正解 link x...