同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 ...