博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物
阅读量:6397 次
发布时间:2019-06-23

本文共 1117 字,大约阅读时间需要 3 分钟。

题目1 : 小Hi和小Ho的礼物

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

某人有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

输出

不同选择的数目。

样例输入
5  1 1 2 2 2
样例输出
12
//按两数和统计一下 注意去掉i == p or j == q的情况#include#include
#include
using namespace std;int n,a[(int)1e3+5],cnt[(int)1e6+5];map
sum;long long ans;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",a+i),cnt[a[i]]++; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) sum[a[i]+a[j]]++; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++){ ans+=sum[a[i]+a[j]]; if(a[i]!=a[j]) ans-=cnt[a[i]]+cnt[a[j]]-1; else ans-=2*(cnt[a[i]]-1)-1; } cout<

 

 

转载于:https://www.cnblogs.com/shenben/p/6720005.html

你可能感兴趣的文章
经典SQL语句大全(基础篇)
查看>>
HTML5 Canvas眨眼睛动画
查看>>
C-C和指针作业题(第一章)
查看>>
[推荐]网店代销的卖家,你的宝贝名称修改了吗?
查看>>
Android NDK JNI C++ <7> eg
查看>>
jQuery打造智能提示插件二(可编辑下拉框)
查看>>
PHP中spl_autoload_register函数的用法
查看>>
[Python] Python 之 function, unbound method 和 bound method
查看>>
Linux makefile 教程 很具体,且易懂
查看>>
希尔排序
查看>>
几种常见的内嵌数据库
查看>>
改变随机数中一些值的概率
查看>>
ASP.NET程序开发范例宝典
查看>>
Spark分析之SparkContext启动过程分析
查看>>
2014电子商务安全技术峰会(含全议题下载)
查看>>
东大OJ-5到100000000之间的回文质数
查看>>
linux C 快速排序法
查看>>
模仿与创新
查看>>
Python用subprocess的Popen来调用系统命令
查看>>
Java NIO与IO的差别和比較
查看>>