題目提供者orangebird
標籤難度普及/提高-
時空限制1s / 128mb
提交 討論
題解上道題中,妖夢斬了一地的木棒,現在她想要將木棒拼起來。
有n根木棒,現在從中選4根,想要組成乙個正三角形,問有幾種選法?
輸入格式:
第一行乙個整數n
第二行n個整數,a1,a2,……an(0一行乙個整數,對1e9+7取模
輸入樣例#1:
4 1 1 2 2
輸出樣例#1:
1
對於30%的資料 n<=5000
對於100%的資料 n<=100000
by-szc
吐槽:做這道題發現了我個人的很多問題,做題實在是不夠仔細!
分析:假設選4根木棍長度為a=b=c+d,我們列舉a和c,就能計算出b和d,這就變成了從所給長度中能選出多少根我們列舉長度的木棍,就要用到組合數。需要注意的是,我們要特判c是否等於d,因為選擇一根c長度的木棍的方案數*選擇一根d長度木棍的方案數≠選擇兩根c長度木棍的方案數,同時,列舉c到a/2就一定要停止,因為超過a/2,就會把乙個答案算2次。關於取模的問題,其實我們只需要用到兩個組合數,這兩個組合數在計算的時候都不必取模,為什麼呢?因為5000*4999/2 < 1e9 + 7,如果非要取模,就只有用逆元了。
如果是用數學方法做這種統計方案數的題一定要非常細心!注意所有可能但不完全相同的情況並且不能多算少算!
#include #include#include
#include
typedef
long
long
ll;using
namespace
std;
const
int mod = 1000000007
;int
n;long
long a[5010
],maxn,ans;
ll c1(ll x)
ll c2(ll x)
intmain()
for (int i = 1; i <= maxn; i++)
for (int j = 1; j <= i/2; j++)
else
ans %=mod;
}printf(
"%lld\n
", ans %mod);
return0;
}
洛谷P3799 妖夢拼木棒
題目鏈結 上道題中,妖夢斬了一地的木棒,現在她想要將木棒拼起來。有n根木棒,現在從中選4根,想要組成乙個正三角形,問有幾種選法?第一行乙個整數n 第二行n個整數,a1,a2,an 0 一行乙個整數,對1e9 7取模 4 1 1 2 2 對於30 的資料 n 5000 對於100 的資料 n 1000...
P3799 妖夢拼木棒
有 nn根木棒,現在從中選 4 根,想要組成乙個正三角形,問有幾種選法?答案對 10 9 7取模。輸入 第一行乙個整數 n。第二行 n 個整數,第 i 個整數 a i,代表第 i 根木棒的長度。輸出 一行乙個整數代表答案。主要是對長度進行計算和處理 因為ai的數值偏小。注意 using namesp...
洛谷p3799 妖夢切木棒
題意 任選四段木板拼正三角形 因為是正三角形 所以我們可以想到至少是兩個相同的,剩下兩個拼成最後一條邊 我們只需要列舉邊長即可 那麼我們對每次讀入的x,使他的cnt 考慮用乙個二重迴圈 外層列舉邊長的長度 從2到5000 內層列舉用來拼成最後一條邊的其他一根木板 一次迴圈對答案有貢獻 當且僅當邊長的...