杭电2141代码如下,我到底是哪儿错了呢,跪求答案!谢谢各位大神了!!

#include<cstdio>#include<algorithm>#include<stdio.h>#include<string.h>#include<stdlib... #include<cstdio>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 1000
using namespace std;

long long d[250010];
int a[max],b[max],c[max];

int bsearch(int x,int y,long long v)
{
int m;
while(x<=y)
{
m=x+(y-x)/2;
if(d[m]==v) return 1;
else if(d[m]>v) y=m;
else x=m+1;
}
return 0;
}

int main()
{
int l,n,m;
int s;
long long x;
int num=1;
int i,j,k,q,p;
int ok;
while( scanf("%d %d %d",&l,&n,&m)==3)
{
for(i=0;i<l;i++)
scanf("%d",&a[i]);
sort(a,a+l);
for(j=0;j<n;j++)
scanf("%d",&b[j]);
sort(b,b+n);
for(k=0;k<m;k++)
scanf("%d",&c[k]);
sort(c,c+m);
q=0;
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
d[q++]=b[j]+c[k];
}
sort(d,d+q);
scanf("%d",&s);
printf("Case %d:\n",num++);
while(s--)
{
scanf("%lld",&x);
if((x<a[0]+b[0]+c[0])||(x>a[l-1]+b[n-1]+c[m-1]))
printf("NO\n");
else if((x==a[0]+b[0]+c[0])||(x==a[l-1]+b[n-1]+c[m-1]))
printf("YES\n");
else
{
for(p=0;p<l;p++)
{
x=x-a[p];
if(bsearch(0,q,x)) {printf("YES\n");break;}
else {x=x+a[p];continue;}
}
if(p==l) printf("NO\n");
}
}
}
return 0;
}

我刚弄的这个号,就八分,大神们别嫌少啊。浪费大家一点时间。
展开
 我来答
porker2008
推荐于2016-07-08 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
#include<cstdio>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 1000
using namespace std;

long long d[251000];
long long a[max],b[max],c[max];

int bsearch(int x,int y,long long v)
{
int m;
while(x<y)
{
m=(x+y)/2;
if(d[m]==v)
return 1;
else if(d[m]>v)
y=m;
else
x=m+1;
}
return 0;
}

int main()
{
int l,n,m;
int s;
long long x;
int num=1;
int i,j,k,q,p;
int ok;
while( scanf("%d%d%d",&l,&n,&m)==3)
{
for(i=0;i<l;i++)
scanf("%I64d",&a[i]);
sort(a,a+l);
for(j=0;j<n;j++)
scanf("%I64d",&b[j]);
sort(b,b+n);
for(k=0;k<m;k++)
scanf("%I64d",&c[k]);
sort(c,c+m);
q=0;
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
d[q++]=b[j]+c[k];
}
sort(d,d+q);
scanf("%d",&s);
printf("Case %d:\n",num++);
while(s--)
{
scanf("%I64d",&x);
if((x<a[0]+b[0]+c[0])||(x>a[l-1]+b[n-1]+c[m-1]))
printf("NO\n");
else if((x==a[0]+b[0]+c[0])||(x==a[l-1]+b[n-1]+c[m-1]))
printf("YES\n");
else
{
for(p=0;p<l;p++)
{
x=x-a[p];
if(bsearch(0,q,x))
{
printf("YES\n");
break;
}
else
{
x=x+a[p];
continue;
}
}
if(p==l)
printf("NO\n");
}
}
}
return 0;
}
追问
太感谢你了。题目中不是有一条描述是,所有的整数(包括给出的A,B,C,还有S)都是三十二位的,为什么现在A,B,C也都需要用六十四为的来存了呢?还有就是读入long long在杭电上面得用%I64d,原来是是因为他判题的服务器是windows的吗?
追答
不用64位貌似也可以。。
是不是windows不是特别清楚。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式