1. 程式人生 > >小Hi和小Ho的禮物

小Hi和小Ho的禮物

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     
11
cin >> 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的禮物