排序查找解决办法
排序查找
题地址:http://poj.org/problem?id=1928
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct point
{
int x;
int y;
int add;
};
bool cmp(point a,point b)
{
if(a.add!=b.add)
return a.add>b.add;
else
return a.y<b.y;
}
int main()
{
struct point arr[440];
int row,column,T_time;
while(scanf("%d%d%d",&row,&column,&T_time)!=EOF)
{
int i,x=1,y=1,sum=0;
for(i=1;i<=row*column;i++)
{
scanf("%d",&arr[i].add);
arr[i].x=x;
if(y%column!=0)
arr[i].y=y%column;
else
arr[i].y=column;
y++;
sum++;
if(sum%column==0)
x++;
}
sort(arr+1,arr+1+row*column,cmp);
int T=2,T1,sum1=0;
for(i=1;i<=row*column;i++)
{
sum1=sum1+arr[i].add;
if(i==1)
T1=arr[i].y-1+1+arr[i].y-1;
else
T1=abs(arr[i].y-arr[i-1].y)+abs(arr[i].x-arr[i-1].x)+1+arr[i].y-1;
T=T+T1;
if(T>T_time)
{
printf("%d\n",sum1-arr[i].add);
break;
}
else
T=T-arr[i].y+1;
}
}
return 0;
}
这个是我的题的代码,希望各位帮忙看一下哪里出了错误。
我几组数据都是可以过的,但是提交是WA或者RuntimeError。。
在这里先谢过了。
------解决思路----------------------
RuntimeError一般都是数组越界或者死循环。检查代码吧point arr[440];这里数组是不是太小了。动态分配吧
------解决思路----------------------
你的row和column都是用户输入的,但没有看到你去检查它们的大小。
如果row*column>439,那么sort时就越界了;如果row*column>440,那么前面初始化数据的循环也越界了。
题地址:http://poj.org/problem?id=1928
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct point
{
int x;
int y;
int add;
};
bool cmp(point a,point b)
{
if(a.add!=b.add)
return a.add>b.add;
else
return a.y<b.y;
}
int main()
{
struct point arr[440];
int row,column,T_time;
while(scanf("%d%d%d",&row,&column,&T_time)!=EOF)
{
int i,x=1,y=1,sum=0;
for(i=1;i<=row*column;i++)
{
scanf("%d",&arr[i].add);
arr[i].x=x;
if(y%column!=0)
arr[i].y=y%column;
else
arr[i].y=column;
y++;
sum++;
if(sum%column==0)
x++;
}
sort(arr+1,arr+1+row*column,cmp);
int T=2,T1,sum1=0;
for(i=1;i<=row*column;i++)
{
sum1=sum1+arr[i].add;
if(i==1)
T1=arr[i].y-1+1+arr[i].y-1;
else
T1=abs(arr[i].y-arr[i-1].y)+abs(arr[i].x-arr[i-1].x)+1+arr[i].y-1;
T=T+T1;
if(T>T_time)
{
printf("%d\n",sum1-arr[i].add);
break;
}
else
T=T-arr[i].y+1;
}
}
return 0;
}
这个是我的题的代码,希望各位帮忙看一下哪里出了错误。
我几组数据都是可以过的,但是提交是WA或者RuntimeError。。
在这里先谢过了。
------解决思路----------------------
RuntimeError一般都是数组越界或者死循环。检查代码吧point arr[440];这里数组是不是太小了。动态分配吧
------解决思路----------------------
你的row和column都是用户输入的,但没有看到你去检查它们的大小。
如果row*column>439,那么sort时就越界了;如果row*column>440,那么前面初始化数据的循环也越界了。