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 要求数据表是已经排好序的 程序存在小的瑕疵
随机推荐
- C#中何时使用dynamic
背景:比如说,有一个方法,有很多参数,且有时候只需要其中的某几个参数,有时候需要使用全部,甚至有时候一个都不需要,这时候写一个长长的参数列表一点都不酷,且容易 出错,这时候就需要考虑C#的dynami ...
- getParameter getAttribute
URL:http://localhost:8888/Test/index.jsp?test=123 <body> ${test} ${requestScope.test} <%req ...
- Python基础之(判断,循环,列表,字典)
一.python介绍 Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在 ...
- cf950f Curfew
神贪心--写了一个晚上加一个早上. 先考虑只有一个宿管的情况. 首先,如果这个宿舍人多了,多余的人就跑到下一个宿舍.(如果这是最后一个宿舍的话,多的就躺床底下) 如果这个宿舍人少了,但是能从别的宿舍调 ...
- appium+python自动化-xpath定位
基本属性定位 以淘宝app为例,定位左上角扫一扫按钮 1.可以通过text文本定位到 //*[@text='text文本属性'] # 定位text driver.find_element_by_xpa ...
- unittest的discover方法使用
使用unittest进行测试,如果是需要实现上百个测试用例,把它们全部写在一个test.py文件中,文件会越来越臃肿,后期维护页麻烦.此时可以将这些用例按照测试功能进行拆分,分散到不同的测试文件中. ...
- MySQL 2003 [ERROR] /usr/sbin/mysqld: Incorrect key file for table './keyword_search/keyword.MYI'; try to repair it
今天对一个有四百多万数据的表增加一个功能时,当做数据插入时,显示没有插入,到Linux的log下面查看了发现下面这条错误信息 在stacOver上面找到这句: 存储引擎(MyISAM)支持修复表.你应 ...
- 【机房收费系统 4】:VB获取标准北京时间,免除时间误差
导读:这又是师傅给我指出的一个问题,说实话,其实开始根本没有当回事,觉得麻烦,可是,等我完成了获取标准北京时间后,我发现,这一步,是必须的.谢谢师傅对我的严格要求,让我一步一步的成长起来! 一.事件缘 ...
- 九度oj 题目1256:找出两个只出现了一次的数字
题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的第一行包括一个整数N(1<=N<=1000). 接下来的一行包括N个 ...
- shell的case-esac
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...