首页 > 其他 > 详细

小Hi和小Ho的礼物

时间:2018-06-12 22:19:22      阅读:166      评论:0      收藏:0      [点我收藏+]

 

题目:小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的礼物

原文:https://www.cnblogs.com/Tuple-Joe/p/9174909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!