Hdu 2141 解题报告
来源:互联网 发布:淘宝刷流量有什么好处 编辑:程序博客网 时间:2024/05/27 16:42
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2141
题目大意:输入A,B,C三个整型数组(数组长度1<=len<=500),然后访问S(1<=S<=1000)次,判断A,B,C三个数组中是否存在这样三个数使得A[i]+B[j]+C[k] = X;是就输出YES,否则输出NO;
分析:如果直接将三个数组合并最坏的情况是500^3的数组长度,而且三个整型数相加,减很有可能就超过了int的范围了。所以还要另想办法,如果把等式变形A[i]+B[j] = X –C[k];(两个int 数相加减也有可能超过范围,这就要看测试数据了),这样变形后,就可以把A,B数组合并成ab[500*500],然后在ab[]中找X-C[k],这里可以选择用二分查找,查找过程还可以进行一些优化……
代码:
#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;int num_a[510],num_b[510],num_c[510],a,b,c,len;int ab[250000];void addab(int num_a[],int num_b[]){ len = 1; memset(temp,0,sizeof(temp)); for (int i = 0 ; i < a; i++) // 合并num_a,num_b for (int j = 0; j < b; j++) ab[len++] = num_a[i] + num_b[j]; sort(ab+1,ab+len);}bool find(int s){ int low,heigh,mid,flag,n; if (s - num_c[c-1] > ab[len-1] ) return false; //如果要找的s比最大值还大 if (s - num_c[0] < ab[1] ) return false; //或s比最小值还小 for (int k = 0; k < c; k++) { n = s-num_c[k]; flag = 0; if (n >= ab[1] && n <= ab[len-1]) { low = 1,heigh = len-1, flag = 1; while (low <= heigh) //在ab中二分查找n; { mid = (low + heigh)/2; if (ab[mid] < n) low = mid+1; else if (ab[mid] > n) heigh = mid-1; else if (ab[mid] == n) return true; } } } return false;}int main(){ int i,case_n,j,k,n,s,Max_a = -1,Max_b = -1; case_n = 0; while (scanf("%d%d%d",&a,&b,&c) != EOF) { case_n++; for (i = 0; i < a; i++) scanf("%d",&num_a[i]); for (j = 0; j < b; j++) scanf("%d",&num_b[j]); for (k = 0; k < c; k++) scanf("%d",&num_c[k]); sort(num_c+0,num_c+c); addab(num_a,num_b); //将num_a,num_b合并存入ab中 scanf("%d",&n); printf("Case %d:\n",case_n); while (n > 0) { scanf("%d",&s); if (find(s)) printf("YES\n"); else printf("NO\n"); n--; } } return 0;}
0 0
- Hdu 2141 解题报告
- HDU 3342 解题报告
- HDU 3336 解题报告
- HDU 3335 解题报告
- hdu 2516解题报告
- hdu 1004解题报告
- hdu 2139解题报告
- hdu 1019解题报告
- hdu 1064 解题报告
- HDU 1113 解题报告
- hdu 1068 解题报告
- HDU:2050解题报告
- hdu 4001解题报告
- hdu 1005解题报告
- HDU解题报告--1003
- HDU解题报告--1004
- HDU解题报告--1005
- HDU 1005 解题报告
- PL/SQL异常处理
- dubbo monitor chart无图解决方案
- 循环---基础
- java实现图片转化为字符图片
- Matlab中的自然对数e
- Hdu 2141 解题报告
- [AHK]用代码实现从QQ邮箱发邮件
- 引号使用宋体其他使用微软雅黑或苹方字体 和 示例
- Gearmand学习2:main函数
- 四大组件之Service服务专题(一)
- C++从零实现深度神经网络之二——前向传播和反向传播
- C语言开发必备基础只是------>Linux下C开发技能
- PKU图论基础题(转)
- 手机应用CI流程简介