在stl庫中,我們能夠使用map容器自動建立key-value的對應。key 和 value可以是任意你需要的型別。
假如我們將map作為陣列來使用,我們會發現它們的執行效率截然不同!
題目:妖夢拼木棒
洛谷鏈結
有 n 根木棒,現在從中選 4 根,想要組成乙個正三角形,問有幾種選法?
答案對10^9+7取模。
輸入格式
第一行乙個整數 n。
第二行 n 個整數,第 i 個整數 a i
代表第 i 根木棒的長度。
輸出格式
一行乙個整數代表答案。
輸入輸出樣例
輸入 #1
41 1 2 2
輸出 #1
1說明/提示
資料規模與約定
對於 30% 的資料,保證 n≤5×103。
對於 100% 的資料,保證 1≤n≤10 5,0≤ai ≤5×10 3。
解題思路:
用m陣列或m對映儲存不同長度木棍的數量。
①、找兩根長度為k長棍
②、找兩根短棍長度分別為i,j。
保證:k = i + j
③、統計長度為k的正三角形的數量。
當短棍不相等時
ans = ans+m[k] * (m[k]-1) * m[j] * m[i]/2
當短棍長度相等時
ans = ans + m[k] * (m[k]-1) * m[i] * (m[i]-1) / 4
ps:記得取模mod=1e9+7
用陣列儲存不同長度木棍的數量
#include
#define ll long long
using
namespace std;
const ll mod =
1e9+7;
ll ans =0;
int m[
500010];
intmain()
for(
int k=
1; k<=
5010
; k++
)//短棍相等
else
if(m[i]
>=
2&&i==j)}}
} cout
}
測試平台上能通過100%的資料
而用map容器儲存不同長度木棍的數量
//將上面 m[500010]修改
map<
int,
int> m;
測試平台上僅能通過30%的資料,其他全部超時。
可見 map 容器封裝在 stl 庫中,在儲存 int 型別時,提取資料速度是要慢於陣列。
希望能夠將自己的一些學習經驗分享給有需要的人。
我是小鄭,乙個堅持不懈的小白。
洛谷P3799 妖夢拼木棒
題目鏈結 上道題中,妖夢斬了一地的木棒,現在她想要將木棒拼起來。有n根木棒,現在從中選4根,想要組成乙個正三角形,問有幾種選法?第一行乙個整數n 第二行n個整數,a1,a2,an 0 一行乙個整數,對1e9 7取模 4 1 1 2 2 對於30 的資料 n 5000 對於100 的資料 n 1000...
洛谷P3799 妖夢拼木棒
題目提供者orangebird 標籤難度普及 提高 時空限制1s 128mb 提交 討論 題解上道題中,妖夢斬了一地的木棒,現在她想要將木棒拼起來。有n根木棒,現在從中選4根,想要組成乙個正三角形,問有幾種選法?輸入格式 第一行乙個整數n 第二行n個整數,a1,a2,an 0一行乙個整數,對1e9 ...
洛谷p3799 妖夢切木棒
題意 任選四段木板拼正三角形 因為是正三角形 所以我們可以想到至少是兩個相同的,剩下兩個拼成最後一條邊 我們只需要列舉邊長即可 那麼我們對每次讀入的x,使他的cnt 考慮用乙個二重迴圈 外層列舉邊長的長度 從2到5000 內層列舉用來拼成最後一條邊的其他一根木板 一次迴圈對答案有貢獻 當且僅當邊長的...