hdu 2141 二分
来源:互联网 发布:中国象棋人工智能算法 编辑:程序博客网 时间:2024/05/16 17:03
题意是给你三个数组 分别有n m k个数 从三个数组里分别拿一个数能不能等于s
刚开始没注意数可以为负数 wa了好多次
别想直接暴力 肯定超时
现将两个数组合并 暴力枚举数少的 二分枚举数多的(非常省时)
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ int num1[510],num2[510],num3[510]; int mark[300000]; int i,j,k,p,d=1; int n,m; while(~scanf("%d%d%d",&n,&m,&k)) { for(i=1;i<=n;i++) scanf("%d",&num1[i]); for(i=1;i<=m;i++) scanf("%d",&num2[i]); p=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) mark[++p]=num1[i]+num2[j]; sort(mark+1,mark+1+p); for(i=1;i<=k;i++) scanf("%d",&num3[i]); sort(num3+1,num3+1+k); int s; scanf("%d",&s); printf("Case %d:\n",d++); while(s--) { int sum; scanf("%d",&sum); int flash=0; int left,right,mid; for(i=1;i<=k;i++) { left=1; right=p; while(left<=right) { mid=(left+right)/2; if(mark[mid]>sum-num3[i]) right=mid-1; else if(mark[mid]<sum-num3[i]) left=mid+1; else { flash=1; break; } } if(flash) break; } if(flash) printf("YES\n"); else printf("NO\n"); } } return 0;}
0 0
- HDU 2141 二分
- hdu 2141 二分搜索
- hdu 2141 二分查找
- hdu 2141(二分)
- hdu 2141 二分查找
- hdu 2141 二分
- HDU 2141二分小解
- HDU 2141 二分查找
- HDU 2141 二分查找
- HDU 2141 二分查找
- hdu 2141 二分 ll
- hdu 2141 (二分+排序)
- HDU 2141 哈希表或者二分
- 二分查找(HDU 2141 )
- HDU-2141(二分查找)
- HDU 2141(搜索题,二分)
- HDU-2141(二分查找_创新)
- hdu 2141 二分查找,三个数相加
- uva11137(DP)
- android几个组件的小总结
- IO条件状态
- Linux Memory Usage: free
- 在UIScrollView中使用Autolayout布局(1)
- hdu 2141 二分
- Transformer入门教程(一)新建项目时看不到数据包
- ios开发过程中屏幕方向判断的问题
- JAVA基础----java中E,T,?的区别?
- 文件的输入和输出
- 【Oracle】第一章创建授权
- 字符串流
- 【Oracle】第二章常用操作
- matlab、opencv、opencv+gpu滤波运行速度的比较