程式設計之美2014 資格賽 題目2 大神與三位小夥伴

2021-06-21 12:56:14 字數 1916 閱讀 2590

時間限制:

2000ms

單點時限:

1000ms

記憶體限制:

256mb

因為方案數可能非常大,大神同學希望知道挑選紀念品的方案數模10^9+7之後的答案。

第一行包括乙個數t,表示資料的組數。

接下來包含t組資料,每組資料一行,包括乙個整數n。

對於每組資料,輸出一行「case x: 」,其中x表示每組資料的編號(從1開始),後接乙個數,表示模10^9+7後的選擇紀念品的方案數。

小資料:

1<=t<=10

1<=n<=100

大資料:

1<=t<=1000

1<=n<=10^18

對於第二組資料,合法的方案有以下幾種,(x,y,z)表示選擇了a類紀念品中價值為x的,b類紀念品中價值為y的,c類紀念品中價值為z的。

(1,1,1): 3*3*3=27種

(1,2,3): 3*2*1=6種

(1,3,2): 3*1*2=6種

(2,1,3): 2*3*1=6種

(2,2,2): 2*2*2=8種

(2,3,1): 2*1*3=6種

(3,1,2): 1*3*2=6種

(3,2,1): 1*2*3=6種

(3,3,3): 1*1*1=1種

一共27+6+6+6+8+6+6+6+1=72種選擇紀念品的方案

注意,如(1,1,2), (2,3,3), (3,1,3)都因為恰好選擇了兩件價值相同的紀念品,所以並不是一種符合要求的紀念品選擇方法。

樣例輸入

2

13

樣例輸出

case 1: 1

case 2: 72

題意:三類紀念品abc,每類都有n種,價值分別為1-n,價值為i的紀念品數量為n-i+1,每類紀念品選乙個,要求不能有恰好兩類紀念品價值相同,求有多少種選法

分析:純數學題,資料比較大,需要在計算時優化。首先,每類紀念品共有sum=(n+1)*n/2個,任選三類紀念品的情況為sum^3,再去掉恰好兩類價值相同的所有情況,即:

sum^3 - 3∑i^2(sum-i),i=1,...,n,i為每類中所選紀念品的個數。

但是n的數量級是10^18,所取模的數量級為10^9,直接遍歷顯然超時,故把公式展開:

sum^3 - 3∑i^2(sum-i) = sum^3 - 3*sum*∑i^2 + 3∑i^3

由於:∑i^2 = n(n+1)(2n+1)/6 = sum*(2n+1)/3,

∑i^3 = [n(n+1)/2]^2 = sum^2

化簡上式:

sum^3 - 3*sum*∑i^2 + 3

∑i^3 

= sum^3 - (2n+1)sum^2 + 3sum^2 

= sum^3 - 2(n-1)sum^2

優化:1、計算乘法時,用mult(x,y)=mult(x,y/2)*2計算,每步取模

2、計算乘方時,用pow(x,y)=pow(x,y/2)^2遞迴計算,每步取模

**:

#include#include#includeusing namespace std;

long long mod = 1000000007;

long long mmult(long long a, long long b)

else

long long ans = mpow(sum,3);

long long tmp = (n-1+mod)%mod;

tmp = mmult(tmp,mpow(sum,2));

tmp = mmult(tmp,2);

ans = (ans+mod-tmp)%mod;

printf("case %d: %lld\n",cnt,ans);

}}

程式設計之美資格賽

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定2個樹a和b,保證a的節點個數 b的節點個數。現在你需要對樹a的邊進行二染色。乙個好的染色方案,指不存在乙個樹a中的連通塊,同時滿足以下2個條件 1.其中只有同色的邊 2.和b同構。兩個樹同構是指,存在乙個一一對映 既是單射...

程式設計之美2015資格賽

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定兩個日期,計算這兩個日期之間有多少個2月29日 包括起始日期 1.年份能被4整除但不能被100整除 2.年份能被400整除 第一行為乙個整數t,表示資料組數。之後每組資料報含兩行。每一行格式為 month day,year ...

2013程式設計之美資格賽總結

終於可以完成乙個程式比賽的題目了,雖然這次的時間有些長。這是第一次完成,感到真心不錯。廢話不說了,下面說一下這次程式設計之美預選賽的情況。當我在凌晨看到這三個題目時,感覺第乙個還有希望,第二個一點思路沒有,第三個不敢期望。第乙個是詞對變換,感覺不太難。第二道是一種.怎麼說呢,反正是一點思路沒有。第三...