小Hi和小Ho的禮物
阿新 • • 發佈:2018-06-13
ont clu AS div order http 圖片 image cin
題目:小Hi和小Ho的禮物
註:【i、j、p、q】為下標
個人感覺這道題是有一定難度的。讀者可以參考一下【四平方和】的解題思路
分析過程下次補上
代碼如下:
1 #include <iostream> 2 #include <unordered_map> 3 using namespace std; 4 5 int main() 6 { 7 int n, a[1000]; 8 long long ans = 0; 9 unordered_map<int, int> cnt1, cnt2; 10 11cin >> n; 12 13 //預處理cnt1,cnt1[X]表示“包含X枚金幣的袋子個數” 14 for(int i = 0; i < n; i ++) 15 { 16 cin >> a[i]; 17 cnt1[a[i]]++; 18 } 19 //預處理cnt2,cnt2[X]表示“選出2個袋子,金幣之和為X的選法種數” 20 for(int i = 0; i < n; i ++) 21 for(int j = i + 1; j < n; j ++)22 cnt2[a[i] + a[j]]++; 23 24 for(int i = 0; i < n; i ++) 25 for(int j = i + 1; j < n; j ++) 26 { 27 if(a[i] != a[j]) //容斥原理 28 ans += cnt2[a[i] + a[j]] - cnt1[a[i]] - cnt1[a[j]] + 1; 29 else 30 ans += cnt2[a[i] + a[j]] - cnt1[a[i]] - cnt1[a[j]] + 3; 31 } 32 cout << ans << endl; 33 34 return 0; 35 }
運行結果如下:
小Hi和小Ho的禮物