题目:小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 }
运行结果如下:
原文地址:https://www.cnblogs.com/Tuple-Joe/p/9174909.html
时间: 2024-11-06 03:35:27