HDU2141Can you find it? http://acm.hdu.edu.cn/showproblem.php?pid=2141
这个题吧,错在了qsort 和 sort 的问题,
qsort WA 的代码
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAX 501
#define MAXMAX 250001
#define LAR 1001
int a[MAX], b[MAX], c[MAX];
int lm[MAXMAX];
int s[LAR];
bool cmp(int a, int b)
{
return a < b;
}
int cmp(const void * a, const void * b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int l, m, n, ss,f = 1;
while (~scanf("%d%d%d", &l, &m, &n))
{
int a[MAX], b[MAX], c[MAX];
int lm[MAXMAX];
int s[LAR];
int i, j, k = 0,t = 0,bleg = 0;
for (i = 0; i < l; i++) scanf("%d", &a[i]);
for (i = 0; i < m; i++) scanf("%d", &b[i]);
for (i = 0; i < n; i++) scanf("%d", &c[i]);
for (i = 0; i < l; i++)
{
for(j = 0; j < m; j++)
{
lm[k++] = a[i] +b[j];
}
}
scanf("%d", &ss);
for (i = 0; i < ss; i++)
{
scanf("%d", &s[i]);
}
printf("Case %d:\n",f++);
qsort(lm, k, sizeof(int), cmp);
for(i=0;i<ss;i++)
{
bleg = 0; //printf("s[%d] = %d k = %d\n",i,s[i],k);
for(j=0;j<n;j++)
{
if(s[i] - c[j] >= lm[0] && s[i] - c[j] <= lm[k-1])
{
int min = 0, max = k - 1, mid;
t = s[i] - c[j];
while (min <= max)
{
mid = (min + max) / 2; //printf("t = %d min = %d,max = %d\n",t,min,max); printf("mid = %d,lm[mid] = %d\n",mid,lm[mid]);
if (lm[mid] > t)
{
max = mid - 1;
}
else if (lm[mid] < t)
{
min = mid + 1;
}
else
{
bleg = 1;
break;
}
}
}
if (bleg == 1) break;
}
if (bleg == 1)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
sort A 的代码
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAX 501
#define MAXMAX 250001
#define LAR 1001
int a[MAX], b[MAX], c[MAX];
int lm[MAXMAX];
int s[LAR];
bool cmp(int a, int b)
{
return a < b;
}
int cmp(const void * a, const void * b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int l, m, n, ss,f = 1;
while (~scanf("%d%d%d", &l, &m, &n))
{
int a[MAX], b[MAX], c[MAX];
int lm[MAXMAX];
int s[LAR];
int i, j, k = 0,t = 0,bleg = 0;
for (i = 0; i < l; i++) scanf("%d", &a[i]);
for (i = 0; i < m; i++) scanf("%d", &b[i]);
for (i = 0; i < n; i++) scanf("%d", &c[i]);
for (i = 0; i < l; i++)
{
for(j = 0; j < m; j++)
{
lm[k++] = a[i] +b[j];
}
}
scanf("%d", &ss);
for (i = 0; i < ss; i++)
{
scanf("%d", &s[i]);
}
printf("Case %d:\n",f++);
qsort(lm, k, sizeof(int), cmp);
for(i=0;i<ss;i++)
{
bleg = 0; //printf("s[%d] = %d k = %d\n",i,s[i],k);
for(j=0;j<n;j++)
{
if(s[i] - c[j] >= lm[0] && s[i] - c[j] <= lm[k-1])
{
int min = 0, max = k - 1, mid;
t = s[i] - c[j];
while (min <= max)
{
mid = (min + max) / 2; //printf("t = %d min = %d,max = %d\n",t,min,max); printf("mid = %d,lm[mid] = %d\n",mid,lm[mid]);
if (lm[mid] > t)
{
max = mid - 1;
}
else if (lm[mid] < t)
{
min = mid + 1;
}
else
{
bleg = 1;
break;
}
}
}
if (bleg == 1) break;
}
if (bleg == 1)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
这是为什么!!!!!待解答