2020 聯合省選 雜題選講(基本都不會)

2021-10-07 11:14:32 字數 1271 閱讀 3661

b卷 d1t1

隨便口胡了乙個貪心就a了。

題目意思不難理解,這題目直接就能想到貪心求解,然後隨便口胡了乙個演算法:

比如說我們現在手裡拿到的牌的數是x

xx,位置為p

pp,則我們要求最小的r

rr,滿足x+∑

k=p+

1rak

x+\sum_^ra_k

x+∑k=p

+1r​

ak​。大概的口胡證明如下:

假設我們現在有個牌數為a

aa,旁邊的牌為1,2

1,21,

2,即a,1

,2

a,1,2

a,1,2(a∈n

a \in \mathbb

a∈n)

如果我們取a,1

a,1a,

1,那麼就變成a+1

,2

a+1,2

a+1,

2,分數為a+1

a+1a+

1.接著取a+1

,2

a+1,2

a+1,

2,變成a+3

a+3a+

3,分數為a+1

+a+3

=2a+

4a+1+a+3=2a+4

a+1+a+

3=2a

+4.如果我們直接取完,分數為a+3

a+3a+

3.很明顯方法一更優。

大概意思是這樣:對於每一張牌的貢獻,如果合併的次數越多(就是每一次合併的牌越少),那麼次數就越多,但是很明顯合併成負數是不划算的,當不能再取非負數時,停止遊戲。

# include

using

namespace std;

const

int n=

1e5+10;

int n;

int a[n]

;long

long q[n]

;long

long ans=0;

intmain

(void)if

(!flag)

break

;else ans+

=q[r]

-q[p]

+pk;

pk=q[r]

-q[p]

+pk;

p=r;

//cout<}

printf

("%lld\n"

,ans)

;return0;

}

2019 2 28 雜題選講

考慮將1至n m分別填入乙個擁有n行m列的 中,不允許重複。你需要滿足以下要求 第i行 1 i n 的最大值為ai。第j列 1 j m 的最大值為bj。請求出合法的填數方案數在模109 7意義下的值。1 n,m 1000 1 ai,bj n m 思路分步 填數 問題符合乘法原理,考慮從大到小填數,先...

雜題選講1 2

把序列排序後 問題轉化為子串行兩兩之間的異或和大於等於k 使用者 trie 樹優化 dp 因為不滿足單調性所以不能用二分來優化 從實際含義入手 ans n 2 sum d1 i dk i sum j k 線性預處理即可 複雜度 o n t 原先做 sa 的題時用過這個套路 列舉長度 len 2 每隔...

9 26雜題選講

非常開心,所有 都咕掉了 cy 簡單計數題,樹狀陣列維護即可。線段樹維護,如果乙個區間整除某個數的時候都等價於減同乙個數,那麼就打上區間減法的標記。複雜度玄學,但是能過。把正著做換成倒著做,把操作變成減去兩邊的數。考慮最大的那個數,顯然在它沒有變化的情況下兩邊的數都不能進行操作,所以如果它沒有變成目...