Can you find it?(二分)
2016-07-26 18:06
429 查看
#include<cstdio> #include<algorithm> #define N 505 using namespace std; __int64 a ,b ,c ,sum[N*N]; __int64 la,lb,lc,len; int bin(__int64 x) { __int64 l=0,r=len-1,mid; while(l<=r) { mid=(l+r)/2; if(sum[mid]==x) return 1; else if(sum[mid]>x) r=mid-1; else l=mid+1; } return 0; } int main() { __int64 i,j,cas=0,s,x,k,m; while(~scanf("%I64d%I64d%I64d",&la,&lb,&lc)) { __int64 len=0; for(i=0;i<la;i++) scanf("%I64d",&a[i]); for(i=0;i<lb;i++) scanf("%I64d",&b[i]); for(i=0;i<lc;i++) scanf("%I64d",&c[i]); for(i=0;i<la;i++) for(j=0;j<lb;j++) sum[len++]=a[i]+b[j]; scanf("%I64d",&m); printf("Case %I64d:\n",++cas); sort(sum,sum+len); sort(c,c+lc); while(m--) { __int64 pp; scanf("%I64d",&s); if(s<c[0]+sum[0]||s>c[la-1]+sum[len-1]) { printf("NO\n"); continue; } for(i=0;i<lc;i++) { pp=s-c[i]; if(bin(pp)) { printf("YES\n"); break; } } if(i==lc) printf("NO\n"); } } return 0; }
Problem Description
Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X.
Input
There are many cases. Every data case is described as followed: In the first line there are three integers L, N, M, in the second line there are L integers represent the sequence A, in the third line there are N integers represent the sequences B, in the forth
line there are M integers represent the sequence C. In the fifth line there is an integer S represents there are S integers X to be calculated. 1<=L, N, M<=500, 1<=S<=1000. all the integers are 32-integers.
Output
For each case, firstly you have to print the case number as the form "Case d:", then for the S queries, you calculate if the formula can be satisfied or not. If satisfied, you print "YES", otherwise print "NO".
Sample Input
3 3 3
1 2 3
1 2 3
1 2 3
3
1
4
10
Sample Output
Case 1:
NO
YES
NOab数组合并,改为:A+B=X-C,然后二分搜一下就可以了
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 505;
__int64 ab[N * N];
int num;
int search(__int64 x)
{
int f = 0, l = num - 1;
int mid;
while(f <= l)
{
mid = (f + l) / 2;
if(ab[mid] == x)
return 1;
else if(ab[mid] < x)
f = mid + 1;
else
l = mid - 1;
}
return 0;
}
int main()
{
int n, m, l, flag = 0, s;
__int64 a
, b
, c
, x;
while(cin >> n >> m >> l)
{
flag++;
num = 0;
for(int i = 0; i < n; i++)
scanf("%I64d", &a[i]);
for(int i = 0; i < m; i++)
scanf("%I64d", &b[i]);
for(int i = 0; i < l; i++)
scanf("%I64d", &c[i]);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
ab[num++] = a[i] + b[j];
sort(ab, ab+num);
sort(c, c+l);
scanf("%d", &s);
printf("Case %d:\n", flag);
while(s--)
{
scanf("%I64d", &x);
if(x < ab[0] + c[0] || x > ab[num-1] + c[l-1])
printf("NO\n");
else
{
__int64 p;
int j;
for(j = 0; j < l; j++)
{
p = x - c[j];
if(search(p))
{
printf("YES\n");
break;
}
}
if(j == l)
printf("NO\n");
}
}
}
return 0;
}
错误代码,找了好长时间就是不知道哪错了,醉了
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; __int64 a[505],b[505],c[505],la,lb,lc; __int64 sum[505*505],len; int bin(__int64 x) { __int64 l = 0,r = len-1; while(l<=r) { __int64 mid = (l+r)>>1; if(sum[mid] == x) return 1; else if(sum[mid]>x) r = mid-1; else l = mid+1; } return 0; } int main() { __int64 m,s,cas = 1,i,j,k; while(~scanf("%I64d%I64d%I64d",&la,&lb,&lc)) {
__int64 len=0; //出错点 for(i = 0; i<la; i++) scanf("%I64d",&a[i]); for(i = 0; i<lb; i++) scanf("%I64d",&b[i]); for(i = 0; i<lc; i++) scanf("%I64d",&c[i]); sort(c,c+lc); for(i = 0; i<la; i++) { for(j = 0; j<lb; j++) { sum[len++] = a[i]+b[j]; } } sort(sum,sum+len); len = unique(sum,sum+len)-sum; scanf("%I64d",&m); printf("Case %I64d:\n",cas++); while(m--) { scanf("%I64d",&s); if(s>sum[len-1]+c[lc-1] || s<sum[0]+c[0]) { printf("NO\n"); continue; } __int64 flag = 0; for(i = 0;i<lc;i++) { int kk = s-c[i]; if(bin(kk)) { flag = 1; break; } } if(flag) printf("YES\n"); else printf("NO\n"); } } return 0; }
相关文章推荐
- RecyclerView添加Header的正确方式
- 设计模式之观察者模式
- 安卓学习笔记---RecyclerView的五大开源项目-解决办法
- OC数据持久化
- react listview最上方空白
- Android中ViewFlipper的使用详解
- Luence
- C#连接mysql数据库
- 服务器硬件及其操作系统基础
- hdu5733内切球
- 机器学习与R之支持向量机svm(上)
- TiDB 集群安装
- 常用正则表达式
- 微服务架构的优势与不足
- jsoup爬取百度瀑布流图片
- iOS FMDB保存图片
- 项目的开发 -- 互联网+
- 正则表达式(regular expression)以及常用语法
- JQ中的attr和prop方法
- linux中如何查看日志中某个异常出现的次数