POJ-2785 Values whose Sum is 0 Hash表
题目链接:https://cn.vjudge.net/problem/POJ-2785
题意
给出四组数,每组有n个数
现从每组数中取一个数作为a,b,c,d
问有几组这样的a+b+c+d=0
思路
首先把第一组和第二组的和添加在hash表里
再枚举三组四组的和,查找即可
代码
#include <cstdio>
#include <cstring>
const int hashSize=int(4e5), idxSize=int(1.6e7);
struct Data{
int value, next, cnt;
Data(int value=0, int next=-1, int cnt=0):
value(value),next(next),cnt(cnt) {}
}data[idxSize];
int head[hashSize];
struct Hash{
int size;
Hash(void):size(0) {
memset(head, -1, sizeof(head));
}
int hash(int num){
return (num+hashSize)%hashSize;
}
int find(int num){
int key=hash(num);
for (int i=head[key]; i!=-1; i=data[i].next)
if (data[i].value==num) return data[i].cnt;
return 0;
}
int insert(int num){
int key=hash(num);
for (int i=head[key]; i!=-1; i=data[i].next)
if (data[i].value==num) {data[i].cnt++; return i;}
data[size]=Data(num, head[key], 1);
return head[key]=size++;
}
};
int n;
int main(void){
while (scanf("%d", &n)==1){
int tmp[4000+5][4];
for (int i=0; i<n; i++)
scanf("%d%d%d%d", &tmp[i][0], &tmp[i][1], &tmp[i][2], &tmp[i][3]);
Hash hash;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
hash.insert(tmp[i][2]+tmp[j][3]);
int ans=0;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++) ans+=hash.find(-tmp[i][0]-tmp[j][1]);
printf("%d\n", ans);
}
return 0;
}
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| 6110ms | 189996kB | 1368 | G++ | 2018-02-16 05:45:12 |
POJ-2785 Values whose Sum is 0 Hash表的更多相关文章
- [poj2785]4 Values whose Sum is 0(hash或二分)
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 19322 Accepted: ...
- POJ 2785 4 Values whose Sum is 0 Hash!
http://poj.org/problem?id=2785 题目大意: 给你四个数组a,b,c,d求满足a+b+c+d=0的个数 其中a,b,c,d可能高达2^28 思路: 嗯,没错,和上次的 HD ...
- POJ 2785_4 Values whose Sum is 0
题意: A,B,C,D四组数中各取一个数,使这四个数相加为0,问有多少组取法? 分析: 四个数列有n4种取法,规模较大,但是可以将他们分成AB,CD两组,分别枚举,最后再合并. 代码: #includ ...
- POJ 2785 4 Values whose Sum is 0
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 13069 Accep ...
- POJ 2785 4 Values whose Sum is 0(想法题)
传送门 4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 20334 A ...
- POJ - 2785 4 Values whose Sum is 0 二分
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25615 Accep ...
- POJ 2785 4 Values whose Sum is 0(折半枚举+二分)
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25675 Accep ...
- 4 Values whose Sum is 0 POJ - 2785
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 29243 Accep ...
- POJ 2785:4 Values whose Sum is 0 二分
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 18221 Accep ...
随机推荐
- echarts中国地图
echarts中国地图效果图: =================== 需要引入echarts的js文件:(1.echarts.min.js:2.china.js) 下载地址: echarts.min ...
- Java基础——protected访问修饰符探讨
Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的子孙类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: packa ...
- Eclipse中將Java项目转变为Java Web项目
1.在项目上点击右键=>properties,在Project Facets配置项中,勾选Dynamic Web Module.Java.JavaScript选项. 2.用记事本打开项目目录下的 ...
- 改变GridView中列的宽度
<asp:TemplateField HeaderText="规格型号" HeaderStyle-Width="24%">
- Mojo Core Embedder API
This document is a subset of the Mojo documentation. Contents Overview Basic Initialization IPC Init ...
- B. Recursive Queries 打表
Code: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...
- iOS开发——GCD总结
Grand Central Dispatch,简称GCD,在异步执行任务的技术之一. 一般将应用程序中记述的线程管理用的代码在系统级中实现,开发者只需要定义想执行的任务并追加到适当的Dispatch ...
- HDU Integer's Power(容斥原理)
题意 求[l,r]的最大指数和(1<=l,r<=10^18) 最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6) 题解 很明显我们可以先求出[1,n]的最大指数和,然后 ...
- [HNOI2015]亚瑟王(期望+DP)
题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...
- 洛谷 P1220 关路灯 (贪心+区间dp)
这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...