博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4334 Trouble
阅读量:6759 次
发布时间:2019-06-26

本文共 2494 字,大约阅读时间需要 8 分钟。

                                   Trouble

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3526    Accepted Submission(s): 1113

Problem Description
Hassan is in trouble. His mathematics teacher has given him a very difficult problem called 5-sum. Please help him.
The 5-sum problem is defined as follows: Given 5 sets S_1,...,S_5 of n integer numbers each, is there a_1 in S_1,...,a_5 in S_5 such that a_1+...+a_5=0?
 

 

Input
First line of input contains a single integer N (1≤N≤50). N test-cases follow. First line of each test-case contains a single integer n (1<=n<=200). 5 lines follow each containing n integer numbers in range [-10^15, 1 0^15]. I-th line denotes set S_i for 1<=i<=5.
 

 

Output
For each test-case output "Yes" (without quotes) if there are a_1 in S_1,...,a_5 in S_5 such that a_1+...+a_5=0, otherwise output "No".
 

 

Sample Input
2 2 1 -1 1 -1 1 -1 1 -1 1 -1 3 1 2 3 -1 -2 -3 4 5 6 -1 3 2 -4 -10 -1
 
Sample Output
No Yes
 

题意:

    给定五个集合,从五个集合中分别取出5个数,如果存在满足a1 +a2 + a3 + a4 +a5 = 0 

分析:

       事实上考虑如下问题,快速求解序列A,序列B中,是否有Ai+Bj=x ,记得是某知名公司的一道面试题吧;

 是两个指针的应用,将A,B升序排列,初试 i 指针指向A[1] ,j 指针指向 B[b_size] ,比较Ai + Bj 与 x 的

大小。若A[i]+B[j]<x , i 指针右移 ; 若 A[i]+B[j]>x , j 指针左移 。事实上是一个贪心的思想。

个人感悟:

     使用returen 比 break 好吧。

#include 
#include
#include
#include
#include
#include
#include
#define Max(a,b) ((a)>(b)?(a):(b))using namespace std ;typedef long long LL ;struct Me{ LL N ,N_2 ,a_size ,b_size ,c_size; LL num[5][208] ; LL A[208*208] ; LL B[208*208] ; LL C[208] ; Me(){} Me(int n):N(n){} void read_init(){ for(int i=0;i<=4;i++) for(int j=1;j<=N;j++) scanf("%I64d",&num[i][j]) ; int k ; k=0; for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) A[++k]=num[0][i]+num[1][j]; k=0 ; for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) B[++k]=num[2][i]+num[3][j]; for(int i=1;i<=N;i++) C[i]=num[4][i] ; } int my_search(LL x){ int i=1 ; int j=b_size ; while(i<=a_size&&j>=1){ if(A[i]+B[j]
x) j-- ; } return 0 ; } int calc(){ sort(A+1,A+1+N*N) ; a_size=unique(A+1,A+1+N*N)-(A+1) ; sort(B+1,B+1+N*N) ; b_size=unique(B+1,B+1+N*N)-(B+1) ; sort(C+1,C+1+N) ; c_size=unique(C+1,C+1+N)-(C+1) ; for(int i=1;i<=c_size;i++){ if(my_search(-1*C[i])) return 1 ; } return 0 ; } void gao_qi(){ read_init() ; if(calc()) puts("Yes") ; else puts("No") ; }};int main(){ int T ,N ; cin>>T ; while(T--){ scanf("%d",&N) ; Me me(N) ; me.gao_qi() ; } return 0 ;}

 

转载于:https://www.cnblogs.com/liyangtianmen/p/3186780.html

你可能感兴趣的文章
nginx 另一WAF方式
查看>>
LinkedTransferQueue学习导引
查看>>
对restore database preview显示结果的思考
查看>>
Windows Server 2008 R2入门之NTFS权限
查看>>
精品软件 推荐 酷我音乐 一个可以下载320k 音质的音乐播放软件
查看>>
heartbeat+DRBD+mysql高可用集群实战
查看>>
The listener supports no services The command completed successfully
查看>>
centos6.5系统编译安装mariadb以及实现主从复制
查看>>
C#获取系统版本信息
查看>>
linux磁盘阵列实战
查看>>
Android应用程序进程启动过程的源代码分析(3)
查看>>
【畅谈百度轻应用】云时代·轻应用·大舞台
查看>>
Forefront_TMG_2010-TMG发布Web服务器
查看>>
MySQL字符集的一个坑
查看>>
区块链将成支付宝国际化的有力武器!
查看>>
理论上分析IP报文的结构各字段的意义
查看>>
OCS 2007 R2搭建准备虚机及快照
查看>>
Oracle 高可用概述
查看>>
存储虚拟化技术之解读
查看>>
X5Pro惊艳双子塔,vivo国际化渐入佳境
查看>>