小Hi和小Ho的礼物
Posted tuple-joe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小Hi和小Ho的礼物相关的知识,希望对你有一定的参考价值。
题目:小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的礼物的主要内容,如果未能解决你的问题,请参考以下文章
HiHo1505:小Hi和小Ho的礼物(Meet-In-The-Middle + 组合数学)