校內題目T2695 桶哥的問題 吃桶

2022-01-12 10:16:27 字數 1912 閱讀 7976

同t2一樣外校蒟蒻可能沒看過:

題目描述:

@桶哥桶哥的桶沒有送完。

桶哥的桶沒有送完,他還有n個桶。他決定把這些桶吃掉。他的每乙個桶兩個屬性:種類aia_iai​和美味值bib_ibi​。若下標為x, y, z(下標從1開始)的三個桶滿足:

xx那麼它們構成乙個**,會產生

(x+z)∗(bx−bz) (x + z) * (b_x - b_z) (x+z)∗(bx​−bz​)

的價值。問:一共會產生多少價值?

上面那個看不清楚的下標是z

輸入格式:

第一行兩個整數n,mn,mn,m,表示共有m種共n個桶。

第二行n個整數表示bib_ibi​,

第三行n個整數表示aia_iai​,(下標)

輸出格式:

一行乙個整數,表示一共會產生多少價值。由於這個數可能很大,你只需要輸出它除以10007的餘數。

如果答案是負的,請將其加上10007再對10007取餘。如-1應輸出10006.

正解開始:

然而_rqy大佬講的我並沒怎麼聽懂,所以也是一蒙一蒙的。

轉換一下公式:

x+y=z-2y

z-x=3y

x,z種類相等

那麼把求價值公式:

展開得:xbx+zbx-xbz-zbz(注意下標),

也就是說,這個東西和y半毛錢關係都沒有!

理一下關係:

1,z>x

2.z-x為3的倍數

3.z和x為同一種類的桶

那麼考慮思路:同餘枚舉

乙個數%3無非是餘1餘2餘3(餘0)

那麼從1,2,3開始,按下標網上列舉,分3種,分別對應3個不同外迴圈,而內迴圈就是網上列舉到最後乙個下標,那麼別看是雙重迴圈,但是你把列舉次數加起來,是o(n)的。

直接快了好多qwq

那麼回歸正題:

內層迴圈幹什麼?

當然是利用∑來求和了

安利核心公式:

(x+z)*(bx-bz)=∑x*bx+z*∑bx-bz*∑x-z*bz*∑1

為什麼∑的地方不同呢???

因為我們要對z列舉(或者x也行),這樣把上一層求和的就給儲存下來繼續用而不是再for迴圈求一遍

其實用雙層迴圈而不是三重迴圈來求階乘也是乙個道理

因為z每次只加乙個而不是又來一遍for迴圈。。。

這個比較清楚了吧。。。。。。

上**了。。。qwq

#include #include

#include

#include

int readint()

const

int mod = 10007;//

定義%陣列

int b[100005], a[100005

];int s[100005], sx[100005], sbx[100005], sxbx[100005];//

s為∑int

main() 分一組

memset(s, 0, sizeof

(s));

memset(sx,

0, sizeof

(sx));

memset(sbx,

0, sizeof

(sbx));

memset(sxbx,

0, sizeof

(sxbx));

for(int i = cc; i <= n; i += 3

) }

printf("%d

", (ans + mod) %mod);

return0;

}氣喘吁吁的甩胳膊,,

%_rqy大佬,是他出的題和給我們講的題!

T2695 桶哥的問題 吃桶

前傳 1.t2686 桶哥的問題 買桶 這題真的hin簡單,真的 2.t2691 桶哥的問題 送桶 前言 這是一道看上去不是毒瘤但實際上有那麼一seisei毒瘤的題目 在我多次提交 仍然屢教不改最後痛改前非的慘痛經歷下,總結出以下 1.可以用結構體存 a b qaq實錘啦是取模的鍋 不用結構體的話那...

校內題目江城唱晚

1.江城唱晚 題目背景 牆角那株海棠,是你種下的思念。生死不能忘,高燭照容顏。一曲江城唱晚,重憶當年坐燈前,青衫中繡著你留下的線。銀臨 江城唱晚 問題描述 扶蘇是個喜歡一邊聽古風歌一邊寫數學題的人,所以這道題其實是五三原題。歌曲中的主人公看著牆邊的海棠花,想起當年他其實和自己沿著牆邊種了一排海 棠,...

7 24校內交流賽 T1 T2

乙個腦洞很大的題,將輸入的所有數異或起來輸出就好了 話說我為什麼這麼喜歡用異或啊 結論題 當某個字串長度恰巧為3 k 1時,從它往下的第3 k 1行恰好只決定於這個字串的左右兩個端點的值 includeusing namespace std inline intread intn,l char a ...