前傳
1.t2686 桶哥的問題——買桶
這題真的hin簡單,真的
2.t2691 桶哥的問題——送桶
前言
這是一道看上去不是毒瘤但實際上有那麼一seisei毒瘤的題目
在我多次提交**仍然屢教不改最後痛改前非的慘痛經歷下,總結出以下#¥@¥#%:
1.可以用結構體存 a , b qaq實錘啦是取模的鍋
不用結構體的話那就換成兩個一維陣列 a[ ] b[ ]
2.多取模,越多越好,能往**mod就往**mod
(一開始mod少了,然後就wa了)
解析
1.把這個式子化簡一下
z - x = 3 y
也就是說明 z,x 屬於同乙個mod(3)的剩餘類
如果 z 是 15 的話,那麼 x 可以是 3 6 9 12 (%3……0)
如果 z 是 16 的話,那麼 x 可以是 1 4 7 10 (%3…… 1)
如果 z 是 17 的話,那麼 x 可以是 2 5 8 11 (%3…… 2)
所以我們就可以列舉 z ,那麼符合條件的 x 就是和它同屬乙個剩餘類並且
的啦2.
我們把這個式子拆一下
( x + z )·( bx - bz )
= x·bx + z·bx - x·bz - z·bz
所以說,對於每乙個 z ,它可以有很多個對應的 x ,雖然 x ,bx
不確定,但是 z , bz 是確定的
也就是說對於每乙個 z 都可以得到以下這個式子
∑( x·bx ) + z·∑bx - bz·∑x - z·bz·(z的個數)
從前往後列舉 z ,對於每乙個 z ,可以滿足這個 z 要求的 x 一定也可以滿足下乙個和這個 z 相類似的 z ,所以說我們就開陣列統計一下
s[ ] 到當前為止的滿足 z 的 x 的數目
sx[ ] 到當前為止的滿足 z 的 x 的和
sbx[ ] 到當前為止的滿足 z 的 bx 的和
sxbx[ ] 到當前為止的滿足 z 的 x*bx 的和
每次先統計,再更新陣列
對於**當中呢,是列舉三種剩餘類,也就是
每次操作之前都要初始化一下
然後開始 for 迴圈列舉 z ,計算
然後更新陣列,按照 a 的種類更新到陣列中的不同地方,陣列中每乙個小格仔代表乙個種類的桶
注意保證答案不為負數 貌似取模就已經保證了
最後輸出答案即可
**
#includeusing題目鏈結ac的關鍵 瘋狂modnamespace
std;
const
int maxn=100001
;const
int mod=10007
;int
n,m;
long
long
ans;
ints[maxn],sx[maxn],sbx[maxn],sxbx[maxn];
struct
rqytong[maxn];
void caozuo(int
rqy)
}int
main()
printf(
"%ld
",ans%mod);
return0;
}
這個題要注意是列舉2的剩餘類啦
~~~~~~qwq寫完之後我發現我要好好組織語言 mod一mod ~~~~~~
校內題目T2695 桶哥的問題 吃桶
同t2一樣外校蒟蒻可能沒看過 題目描述 桶哥桶哥的桶沒有送完。桶哥的桶沒有送完,他還有n個桶。他決定把這些桶吃掉。他的每乙個桶兩個屬性 種類aia iai 和美味值bib ibi 若下標為x,y,z 下標從1開始 的三個桶滿足 xx那麼它們構成乙個 會產生 x z bx bz x z b x b z...
洛谷 桶哥的問題 送桶 題解
一讀題,發現與貪心中的任務排程有點類似。保證答案大於等於零,言外之意即為所有任務都可以在合法時間內完成。那麼只要按照任務排程的思路做就行了 用結構體 方便sort 陣列t讀入所有ai bi後按照結束時間從大到小排序。設ans為答案,i為當前要處理的任務在排序後的編號。ans初始為t 1 b,i 1,...
洛谷 P哥的桶(線段樹 線性基)
p哥在ioi取得了金牌,現在他開始找女朋友了!p哥現在有nn個桶,他們排成了一排,這些桶可以裝下任意多個女朋友。每個女朋友有乙個固定的顏值 p哥時不時地會找新女朋友,並把新找的女朋友丟進某個桶裡面。我們用1 k x1kx來表示p哥找了乙個顏值為xx的女朋友,並且丟進了kk號桶裡面 p哥每天晚上需要在...