/*描述某人有N袋金币,其中第i袋内金币的数量是Ai。现在他决定选出2袋金币送给小Hi,再选2袋金币送给小Ho,同时使得小Hi和小Ho得到的金币总数相等。他想知道一共有多少种不同的选择方法。具体来说,有多少种下标四元组(i, j, p, q)满足i, j, p, q两两不同,并且i < j, p < q, Ai + Aj = Ap + Aq。例如对于数组A=[1, 1, 2, 2, 2],一共有12种选法:i j p q1 3 2 41 3 2 51 4 2 31 4 2 51 5 2 31 5 2 42 3 1 42 3 1 52 4 1 32 4 1 52 5 1 32 5 1 4输入第一行包含一个整数N。第二行包含N个整数,A1, A2, A3 ... AN。对于70%的数据,1 <= N <= 100对于100%的数据,1 <= N <= 1000, 1 <= Ai <= 1000000输出不同选择的数目。样例输入51 1 2 2 2样例输出12思路:1. 预处理2袋金币的和和某个值X一共有多少种选法,将预处理的结果存在哈希表中2. 一袋金币不能即给小Hi又给Ho.方法:第一袋的选法数目等于有几个袋子的金币与第三袋一样举例:情况1A[1,1,2,2,2]i   j   为下标1   31   41   52   3//     2   4     选这两种//     2   5假设小Hi为下标 1,3情况2:A[2,2,2,2,2]i   j1   2  1   31   41   52   32   42   5//     3   4     选这三种//     3   5//     4   5假设小Hi为下标 1,2所以我们预处理cnt1[X]表示包含X枚金币的袋子数
*/
#include <iostream>
#include <unordered_map>
int n, a[1000];
long long ans = 0;
using namespace std;
unordered_map<int, int> cnt1, cnt2;
int main()
{cin >> n;for (int i = 0; i < n;i++){cin >> a[i];cnt1[a[i]]++;}for (int i = 0; i < n;i++){for (int j = i + 1; j < n;j++){cnt2[a[i] + a[j]]++;}}for (int i = 0; i < n;i++){for (int j = i + 1; j < n;j++){//不同情况下容斥原理的具体算法if (a[i]!=a[j]){ans += cnt2[a[i] + a[j]] - cnt1[a[i]] - cnt1[a[j]] + 1;}else{ans += cnt2[a[i] + a[j]] - cnt1[a[i]] - cnt1[a[j]] + 3;}}}cout << ans << endl;
}

小Hi和小Ho的礼物相关推荐

  1. 从高排到低变成小楼梯儿歌_【课程采风】古运萌宝安全小知识之小剪刀的秘密...

    这么漂亮的剪纸是怎么做出来的呢? 是用剪刀剪出来的,我在南长街看过,有个老奶奶能用剪刀剪出这些漂亮的剪纸呢! 那我们也来试着用剪刀剪纸吧!可是小朋友们应该怎样安全地使用剪刀呢?古运实幼中班宝贝们有话说 ...

  2. python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

  3. 你能用微信小程序打开小程序了【附开发方法】

    6月21日晚间,微信小程序再次迎来升级:小程序可以打开小程序了,同一个公众号下关联的10个同主体小程序和3个非同主体小程序之间,可以调用接口直接相互跳转.微信客户端6.5.9及以上版本支持.另外门店小 ...

  4. [小程序]微信小程序登陆并获取用户信息

    1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid ...

  5. 一队老耗子,每个月都生一对小耗子,小耗子长3个月,第四个月开始变成老耗子开始生, // 假设所有耗子都不死,请问20个月之后共有多少只耗子?...

    一队老耗子,每个月都生一对小耗子,小耗子长3个月,第四个月开始变成老耗子开始生, 假设所有耗子都不死,请问20个月之后共有多少只耗子? public class 计算老鼠数量 {public stat ...

  6. Div1 小A抓小B tarjan双连通分量缩点+dfs

    题目描述 小A和小B在一个无向图G上进行一个游戏.图G是连通的,有n个点,n条边,无重边,无自环,结点编号为1~n.游戏开始前小A在结点x,小B在结点y(x≠y).游戏开始后,小A和小B轮流进行移动( ...

  7. 小课堂?小视频?小商店?

    今天,没有什么特别内容可更新,就来随便聊聊吧. 01 雄雄的小课堂 这是一个公众号,内容主要有两大类. 一类是以分享编程技术为主,一方面是为了提升自己,另一方面也是为了帮助别人,希望阅者有益,平时也会 ...

  8. matlab小波脊线,小波脊线提取,模极大值法。运行的结果不太对,代码有些地方我也没完全看懂...

    本帖最后由 1393107100 于 2019-5-1 11:10 编辑 clear,clc close all %%%%%% 小波变换 %%%%%%%%%%%%%%%% fs=1024; t=1/f ...

  9. 酷客多小程序实现小程序之间跳转功能,让小程序玩出新花样

    自从微信公布可以实现小程序之间相互跳转功能以来,酷客多小程序(http://www.kukeduo.cn)紧跟脚步,就在上周推出了小程序跳转小程序的端口,对于拥有多个小程序的企业来说,这个新功能的推出 ...

最新文章

  1. .net 应用迁移到Mono 工具 (Moma)
  2. springmvc+mybatis,在mybatis逆向工程的基础上使用模板自动生成controller层代码
  3. Android Linker学习笔记
  4. Spring整合ActiveMQ完成消息队列MQ编程
  5. JQuery------各种版本下载
  6. 怎么让电脑屏幕一直亮着_电视机指示灯亮不开机怎么办 电视机故障及维修介绍【详解】...
  7. 20172325 2018-2019-1 《Java程序设计》第二周学习总结
  8. 一个小厂前端 Leader 如何筛选候选人?
  9. 出让执行权:Task.Yield, Dispatcher.Yield
  10. .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线
  11. Android7.0以后的ninja编译系统
  12. 一个简单的SQL最优写法讨论(1)
  13. STC官方软件波特率计算器使用方法
  14. 使用GWmodel进行GWR模型相关运算
  15. 最好用的屏幕分辨率修改器:SwitchResX for Mac
  16. 【华为机试真题 Python实现】分苹果
  17. Unity资源分享网站——记录
  18. 网络安全知识竞赛(国家信息安全水平考试NISP)模拟题1
  19. DLP Lightcrafter™ 4500 EVM常见问题答疑
  20. C++复习1:一些概念

热门文章

  1. Part 2 Linux programming:chapter 18:多线程服务器端实现
  2. 利用HttpSession记录用户的登陆次数
  3. 程序员笔记工具 cherrytree
  4. KVM内存管理(三)—— KSM操作实践
  5. (三十)AO和GO剖析
  6. 旋转矩阵和变换矩阵的概念和区别
  7. 企业防病毒体系建设的探讨
  8. 开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别。
  9. Centos7下为nvidia显卡安装驱动
  10. mplab c30 注册方法