题意
如果给你三个数列 A[],B[],C[],请问对于给定的数字 X,能否从这三个数列中各选一个,使得A[i]+B[j]+C[k]=X?
多组数据,处理到 EOF。
每组数据的第一行是三个数 L, M, N,分别代表数列 A[],B[],C[] 的长度,接下来三行,每行分别是L, M, N 个数,分别代表数列 A[], B[], C[]。
接下来一行包含一个数S,代表有S组询问。之后的S行每行一个数,代表这组询问的 X。
1<=L, N, M<=500, 1<=S<=1000 ;
所有的数都在 32 位整数范围内。
时间限制是3s,暴力打表的话500*500*500=125000000,空间限制为10000kb,可以开辟10000*1024=10240000的空间。但是暴力打表的话共有 500*500*500=125000000种情况,空间时间都超。
思路:
把三层循环换成两层,计算并记录前两列的答案,在最后查询时,根据查询的数字x,遍历第三列的值 c [ ],计算出差值x-c [ ] ,并查找表中是否有这样的值,如果有,可以组成。
这样子时间变成了500*500+1000*500=750000,空间变为了500*500=250000,就很nice&