[C/C++]POJ1328答案错误,自己测试数据没有问题

LeeCarry 2017-01-12 08:52:36
问题链接:http://poj.org/problem?id=1328
#include<stdio.h>
#include<stdlib.h>
int comp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n,d;
for(int j=1;scanf("%d %d",&n,&d)!=0&&(n!=0||d!=0);j++)
{
int a[1000],b[1000],flag=0;
for(int i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(int i=0;i<n;i++)
{
if(b[i]>d||b[i]<0||d<0)//判断是否有解
{
flag=1;
break;
}
}
if(flag==1)
{
printf("Case %d: -1\n",j);
continue;
}
qsort(a,n,sizeof(int),comp);
int sum=1;
for(int i=a[0]+d;i<a[n-1]-d;i+=d)//在岛的右侧放一个雷达,长度为雷达检测范围
{
sum++;
for(int k=0;k<n;k++)// 寻找在雷达范围外的下一个岛屿
{
if(a[k]>i)
{
i=a[k];
break;
}

}
}
printf("Case %d: %d\n",j,sum);

}
return 0;

}

解题思路是先判断是否有解,如果有解,先将岛屿以X轴进行排序,之后在岛屿的右侧放一个雷达,长度为雷达范围,再寻找范围外的下一个岛屿
下面是官网测试数据
Sample Input
3 2
1 2
-3 1
2 1

1 2
0 2

0 0
Sample Output
Case 1: 2
Case 2: 1

下面是csdn博主自用测试数据,连接:http://blog.csdn.net/deepmindman/article/details/52278572
2 2
1 1
2 2

0 0
Case 1:1

9 3
0 2
-3 2
-4 2
-5 2
3 2
6 2
9 2
12 2
15 2
0 0
Case 1:4

3 2
1 0
-3 -1
2 1

0 0
Case 1: -1

2 2
1 1
2 2

0 0
Case 2: 1

5 4
-2 2
1 2
0 3
3 3
4 3
0 0
Case 3: 1


注:提交为C++

我跟那些搜到的思路好像不太一样,如果是思路错了,希望能指出哪里错了,并且希望有一个反例测试数据
...全文
1240 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2017-12-19
  • 打赏
  • 举报
回复
mstlq 2017-12-16
  • 打赏
  • 举报
回复
来晚一步,恭喜楼主自己解决了问题
bbjiabcd 2017-10-30
  • 打赏
  • 举报
回复
接分
LeeCarry 2017-01-12
  • 打赏
  • 举报
回复
发现题目理解错了,结帖送分

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧