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