NOIP2016提高A組模擬10 15 算迴圈

2022-07-22 06:12:13 字數 1273 閱讀 5118

題解

我們發現這六重迴圈有相同的部分,變為三重迴圈,即:

for i:=1 to n do

for j:=i to n do

for k:=i to j do

三個for迴圈。

然後發現:

for i:=1 to n do

for j:=i to n do

是求1到n的和,

共迴圈了n(n+1)/2。

再發現:

for j:=i to n do

for k:=i to j do

是1的平方加到n的平方,

共迴圈了n(n+1)(2n+1)/6。

因為for j:=i to n do用了兩次,

所以總共迴圈了:

(n(n+1)/2)*(n(n+1)(2n+1)/6)/2。

化簡為:(n的三次方+3*n的二次方+2*n)/6。

因為要mod,要用乘法逆元。

**

const

mo=1000000007;

var n,m,t:int64;

function

try1

(f:int64):int64;

var a,b,c:int64;

begin

a:=(f*f mod mo)*f mod mo;

b:=(f*f mod mo)*3

mod mo;

c:=2*f mod mo;

exit(((a+b) mod mo+c)*t mod mo);

end;

begin

assign(input,'loop.in');

assign(output,'loop.out');

reset(input);

rewrite(output);

readln(n,m);

t:=166666668;

n:=n mod mo;

m:=m mod mo;

write(try1(n)*try1(m) mod mo);

close(input);

close(output);

end.

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...

NOIP2016提高A組模擬9 2 單峰

問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...