小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的礼物的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder 1505 小Hi和小Ho的礼物

HiHo1505:小Hi和小Ho的礼物(Meet-In-The-Middle + 组合数学)

hihocoder1545 : 小Hi和小Ho的对弈游戏(树上博弈&nim博弈)

数论五·欧拉函数

hihoCoder 1298 : 数论五·欧拉函数

清理垃圾