HDU 4334 Trouble(哈希|线性查找)
给定五个集合。问是否能从五个集合各取一个元素,使得元素之和为0.
这道题有两种做法,一种是哈希,然而之前没写过哈希.....比赛后从大神那copy了一份。
这里说还有一种。
对于这五个集合分为三组。1,2组求和为一组,3,4组求和分为一组,5为一组。
那么如今转化为了是否能从前两组中各取一个元素。使得这两个值和为第三组一个元素的相反数。
那么对于第一组我们升序排序。第二组我们降序排序。
对于第三组里的任一元素,假如第一组队首加第二组队首之和大于第三组的元素。那么第二组游标往后移一位,反之第一组移一位,
那么这个查找时间就为O(m),m为数组元素个数。
那么总的时间复杂度为O(n*n*n).
<pre class="cpp" name="code">#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#define eps 1e-6
#define LL long long
#define pii pair<int,int>
using namespace std; //const int maxn = 100 + 5;
//const int INF = 0x3f3f3f3f; LL s[6][205];
LL s12[200*202], s34[200*202];
int n;
bool check(LL t) {
int y12 = 0, y34 = n*n-1;
// cout << y12 << endl << y34 << endl;
while(y12<n*n && y34>=0) {
LL tmp = s12[y12] + s34[y34];
// cout << s12[y12] << endl << s34[y34] << endl;
// cout << tmp << endl;
if(tmp == t) return true;
else if(tmp < t) y12++;
else y34--;
}
return false;
} int main() {
// freopen("input.txt", "r", stdin);
int t; cin >> t;
while(t--) {
cin >> n;
for(int i = 0; i < 5; i++) {
for(int j = 0; j < n; j++) scanf("%I64d", &s[i][j]);
}
int y1 = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
LL tmp = s[0][i]+s[1][j];
s12[y1++] = tmp;
}
}
int y2 = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
LL tmp = s[2][i]+s[3][j];
s34[y2++] = tmp;
}
}
// cout << y1 << y2 << endl;
sort(s12, s12+n*n);
sort(s34, s34+n*n);
int tag = 0;
for(int i = 0; i < n; i++) if(check(-s[4][i])) {
tag = 1; break;
}
// cout << check(4) << endl;
if(tag) puts("Yes");
else puts("No");
}
return 0;
}
HDU 4334 Trouble(哈希|线性查找)的更多相关文章
- PKU 4334 Trouble(哈希)
原题链接 思路:哈希存入相反数 注意:HDU不支持long long要使用__int64 #include<cstdio> #include<cstring> #define ...
- HDU 4334 Trouble (暴力)
Trouble Time Limit: 5000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- HDU 4334 Trouble
Trouble Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 4334 Trouble (数组合并)
Trouble Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 4334——Trouble——————【贪心&水题】
Trouble Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU OJ 4334 Trouble 2012 Multi-University Training Contest 4
题目:click here 题意: 给定5组数据,每组数据选择一个数,看是否能找到5个数的和为零. 分析: 千万不要~~T~~ 普通线性查找: #include <iostream> #i ...
- List<T>线性查找和二分查找BinarySearch效率分析
今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式. 线性查找:Contains,Find,IndexOf都是线性查找. 二分查找:Bin ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数组查找算法的C语言 实现-----线性查找和二分查找
线性查找 Linear Search 用户输入学生学号的成绩 二分查找 Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵
随机推荐
- selenium之定位以及切换frame
总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...
- .NET重构(五):存储过程、触发器和函数的区别
导读:在触发器的学习过程中,师傅讲了它的耦合性高,建议我能用存储过程,那到底什么是存储过程呢,自己也不是特别了解,还有就是,触发器也算是一种特殊的存储过程,为什么就不建议多用呢?接下来,就谈谈触发器. ...
- Codeforces Round #402 (Div. 2) A+B+C+D
Codeforces Round #402 (Div. 2) A. Pupils Redistribution 模拟大法好.两个数列分别含有n个数x(1<=x<=5) .现在要求交换一些数 ...
- 九度oj 题目1151:位操作练习
题目描述: 给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到. 循环左移和普通左移的区别在于:最左边的那一位经过循环 ...
- web.xml不同的头文件
<转自:http://blog.csdn.net/qq_16313365/article/details/53783288> 1. Servlet 3.1 Java EE 7 XML sc ...
- RSA工作原理
摘自:http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 一.基础数论 1.互质关系 如果两个正整数,除了1以外,没有 ...
- BestCoder Round #25 1002 Harry And Magic Box [dp]
传送门 Harry And Magic Box Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- Servlet 2.4 规范之第二篇:Servlet接口
Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...
- CentOS 7.5 安装Docker 教程
Docker简介 Docker是一个开源的容器引擎,它有助于更快地交付应用.Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理. 使用Docker可更快地打包.测试以及部署 ...
- mysql主从库
http://wangwei007.blog.51cto.com/68019/965575 一.mysql主从的原理 1.Replication 线程 Mysql的 Replication 是一个异步 ...