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

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

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

枚举小的那个集合的元素,搜索两个大的集合。可以这样做,定义一个初始为指向最小元素的指针,一个指向最大元素的指针(两个指针是指向不同的集合的),两者之和相等则返回,小于则移动小指针+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. BA-楼宇自控系统设计论文(转载)潘翌庆 元晨

    楼宇自控系统设计 潘翌庆 元晨 一.概述 楼宇自控系统(Building Automation System-BAS)是智能建筑中不可缺少的重要组成部分,在智能建筑中占有举足轻重的地位.它对建筑物内部 ...

  2. [React] How to use a setState Updater Function with a Reducer Pattern

    In this lesson we'll walk through setting up an updater function that can receive an action argument ...

  3. EJB学习(四)——Enterprise Bean(企业Bean)和Entity Bean(实体Bean)

        一.为什么使用EJB ? 企业Bean执行在EJB容器中.企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式能够 ...

  4. disruptor实操作手冊(二)

    多消费者场景 上一篇文章介绍了怎样构建一个简单的disruptorproject之后.应该有相当一部分客官骂娘了,确实这种范例在其他地方多的是. 从这篇開始,介绍一些不一样的东西. 一,多个消费者: ...

  5. codeforces Towers 题解

    Little Vasya has received a young builder's kit. The kit consists of several wooden bars, the length ...

  6. Sublime text3 Emmet使用

    Emmet需要配置pyv8 进入 https://github.com/emmetio/pyv8-binaries 下载解压文件放入Sublime Installed Packages下面 就可以使用 ...

  7. 最小生成树基础 (Kruskal)

    最小生成树 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. 检测Nginx访问成功(状态码200)的IP及次数

    cat  access.log |awk '{print $1,$9}'|grep '200'|sort | uniq -c|awk '{print $2" "$1}'

  9. sdwebimage缓存图片

    当使用SDWebImage时,如果用相同图片名的图片替换掉了原始缓存的图片,当再次请求的时候,还是使用的缓存图片,图片不会发生改变 原因:图片在NSCache中是以absolute url作为key存 ...

  10. ROS安装教程

    对于ROS的安装,在它的官方网站: http://wiki.ros.org/ROS/Installation 中也有详细说明.但是对于像博主这样先天英语发育不全的人来说,直接看官网还是有点困难的. 所 ...