本来以为是一道水题,好吧,做了才知道,出题的人有多牛。二分搜索是不可能的了,因为会超内存。。。

看到别人的搜索两个集合的提示,我就自己一边去想了。终于想出来了:

可以这样做,先把每两个集合的和值枚举出来并成一个大集合,排序,去重。剩下一个集合,于是,共三个集合。

枚举小的那个集合的元素,搜索两个大的集合。可以这样做,定义一个初始为指向最小元素的指针,一个指向最大元素的指针(两个指针是指向不同的集合的),两者之和相等则返回,小于则移动小指针+1,否则移动大指针-1.直至二者相等退出。然后再用两个指针交换指向另一个集合,重复上述过程。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL __int64
using namespace std; LL A[41000],B[41000];
LL C[41000];
int pa,pb;
LL S[5][250]; bool find_t(LL a){
int tma,tmi;
LL tmp;
tma=pa,tmi=1;
while(tma>=1&&tmi<=tma&&tmi<=pb){
tmp=A[tma]+B[tmi];
if(tmp==a) return true;
else if(tmp<a) tmi++;
else tma--;
}
tma=pb,tmi=1;
while(tma>=1&&tmi<=tma&&tmi<=pa){
tmp=A[tmi]+B[tma];
if(tmp==a) return true;
else if(tmp<a) tmi++;
else tma--;
}
return false;
} bool cmp(LL a,LL b){
if(a<b) return true;
return false;
} int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<5;i++){
for(int j=1;j<=n;j++)
scanf("%I64d",&S[i][j]);
}
pa=pb=0;
C[0]=A[0]=B[0]=0; int tb=0;
for(int i=0;i<=1;i++){
pb=0;
for(int j=1;j<=n;j++){
if(tb==0)
C[++pb]=C[0]+S[i][j];
else{
for(int k=1;k<=tb;k++)
B[++pb]=C[k]+S[i][j];
}
}
if(tb==0)
tb=n;
else tb=tb*n;
} tb=0;
for(int i=2;i<4;i++){
pa=0;
for(int j=1;j<=n;j++){
if(tb==0)
C[++pa]=C[0]+S[i][j];
else{
for(int k=1;k<=tb;k++)
A[++pa]=C[k]+S[i][j];
}
}
if(tb==0)
tb=n;
else tb=tb*n;
} int t=1;
sort(A+1,A+pa+1,cmp);
for(int i=2;i<=pa;i++)
if(A[i]!=A[t]){
A[++t]=A[i];
}
pa=t; t=1;
sort(B+1,B+pb+1,cmp);
for(int i=2;i<=pb;i++)
if(B[i]!=B[t]){
B[++t]=B[i];
}
pb=t; bool flag=false; for(int j=1;j<n;j++){
if(find_t(-S[4][j])){
flag=true;
break;
}
} if(flag)
printf("Yes\n");
else printf("No\n");
}
return 0;
}

  

HDU 4334 Contest 4的更多相关文章

  1. HDU 4334 Trouble (暴力)

    Trouble Time Limit: 5000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  2. HDU 5045 Contest(状压DP)

    Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...

  3. hdu - 5045 - Contest(国家压缩dp)

    意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...

  4. [ACM] hdu 5045 Contest (减少国家Dp)

    Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...

  5. HDU–5988-Coding Contest(最小费用最大流变形)

    Coding Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. HDU 4334 Trouble

    Trouble Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. hdu 5045 Contest(状态压缩DP)

    题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...

  8. HDU 5045 Contest

    pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...

  9. Trouble HDU - 4334

    Hassan is in trouble. His mathematics teacher has given him a very difficult problem called 5-sum. P ...

随机推荐

  1. nodejs-循环

    for循环 for(var key in object){ consol.log('wor' : key); } 来自为知笔记(Wiz)

  2. maven下载的jar包可以查看源码

    1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的 ...

  3. IOS之UITableView——怎样刷新父页面的Cell

    问题:评论数同步 在社交相关的项目中常常有这种主页面,主列表的Cell中有赞数.评论数,详情页顶部也是相同的一个Cell,下部有评论列表,评论添加或降低.详情页的评论数随之改变,返回主列表,主列表的相 ...

  4. 在Kali上安装打印机

    在Kali 2.0上安装打印机 最近在玩儿渗透测试,就把自己的办公电脑做成了Kali,可是发现办公室的网络打印机没办法正常使用,上网查了一下,把整个过程简单的记录一下,省的忘记了 1.安装cups a ...

  5. bzj1106: [POI2007]立方体大作战tet

    比较玄幻的题目. 考虑两个不同的元素 假设位置是 a...a...b...b... 那么不需要通过交换ab来消除ab,各自弄就行 若是 a...b...b...a... 那也没必要交换,先把b消掉就好 ...

  6. UESTC--1269--ZhangYu Speech(模拟)

    ZhangYu Speech Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit ...

  7. Spark任务调度

    不多说,直接上干货! Spark任务调度 DAGScheduler 构建Stage—碰到shuffle就split 记录哪个RDD 或者Stage 输出被物化 重新提交shuffle 输出丢失的sta ...

  8. golang vue nginx

    https://segmentfault.com/a/1190000012780963 https://blog.csdn.net/qq_32340877/article/details/790321 ...

  9. asp实现阿里大鱼短信API接口的方法

    阿里大鱼是阿里推出的产品,官方提供JAVA..NET.PHP等版本的SDK下载,不知为何,唯独不提供ASP版本的SDK. 不提供没关系,自己写就是了,参照官方提供的API写一个就是了. 本来以为无非是 ...

  10. 苹果操作系统名称演变史 新名称macOS

    历史回顾 发布年代 名称 序号 1994-1999 Classic Mac OS 1-9 2001-2011 Mac OS X 10.0-Lion 2012-2015 OS X Mountain Li ...