音无麻里亚 2015-11-05 15:26 采纳率: 0%
浏览 1528

谁来帮我看看这代码哪里错了,只是简单的C程序(折半搜索+快速排序),题库上说我数组越界?求帮忙看看

#include
#define MAXN 500+10

int n,m;
long int a[MAXN],b[MAXN],c[MAXN],d[MAXN],cd[MAXN*MAXN];

void sort(long int a[],int xx,int yy)
{
if(xx>=yy)return;
int x=xx,y=yy,k=a[xx];
while(x {
while(a[y]>=k)
{
if(x<y)y--;
else break;
}
a[x]=a[y];
while(a[x]<=k)
{
if(x<y)x++;
else break;
}
a[y]=a[x];
}
a[x]=k;
sort(a,xx,x-1);
sort(a,x+1,yy);
}

int binarysearch(long int a[],int x,int H,int T)//二分搜索
{
int i=H+(T-H)/2;

if(a[i]==x||a[T]==x||a[H]==x)return 1;
else if(T==H+1)return 0;
else if(H==T)return 0;
else if(x>a[i]) return binarysearch(a,x,i,T);
else if(x<a[i]) return binarysearch(a,x,H,i);

}

int main()//主函数
{
freopen("C:\Users\helloworld\Desktop\putin.txt","r",stdin);
int T;
int i,j,k,numcd=0;
scanf("%d",&T);//循环T次
for(int loop=0;loop<T;loop++)
{
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);}
for(i=0;i<n;i++)
{scanf("%d",&b[i]);}
for(i=0;i<n;i++)
{scanf("%d",&c[i]);}
for(i=0;i<n;i++)
{scanf("%d",&d[i]);}

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cd[numcd++]=c[i]+d[j];
        }
    }

    sort(cd,0,numcd-1);//为cd的枚举组合排序

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            int need=m-(a[i]+b[j]);
            if(binarysearch(cd,need,0,numcd-1))
            {
                printf("YES\n");
                break;
            }
        }
        if(j!=n)break;
    }
    if(i==n)printf("NO\n");
    numcd=0;
}
return 0;

    /*sort(d,0,n-1);

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            for(k=0;k<n;k++)
            {
                int x=m-a[i]-b[j]-c[k];
                if(binarysearch(d,x,0,n-1))
                {printf("YES\n");break;}
            }
            if(k!=n)break;
        }
        if(j!=n)break;
    }
    if(i==n)
    {printf("NO\n");}
    //binarysearch(d[MAXN],) 
}
 return 0;*/

}

题目是这样的:
输入的第一行是一个整数T(0<T≤20),代表接下来有T组数据。

每组数据的第一行有两个整数n,m(0<n<500, m为非负整数),n代表每个能量槽电力输出大小的种数,m代表山岭巨人的生命值。

接下来4行,每行有n个数代表该能量槽可选的电力输出大小。可选的电力输出大小ai满足0≤ai<10^9。

详情参看样例输入。

Output
每组数据输出一行,若存在至少一种搭配方式使总伤害刚好等于山岭巨人的生命值则输出“YES”,否则输出“NO”(不包含双引号)。

Sample Input
2
3 16
3 4 5
2 3 4
4 2 3
4 5 6
1 10
1
2
3
11

求帮忙,应该不是很难懂,我的程序

  • 写回答

1条回答 默认 最新

  • beep_ 2015-11-05 16:13
    关注

    Cd[50+10*50+10]

    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面