我试图解决在线法官的问题(https://www.codechef.com/LOCMAY17/problems/LOC172)。以下是问题的代码。当我提交判断时给出运行时错误()。 所有的变量都被用于约束。请帮我找出问题所在? 代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
main()
{
long long int h,w;
while(1)
{
cin>>h>>w;
if(h==-1 && w==-1)
exit(1);
int n,i,j;
cin>>n;
long long int arr[n][4];
for(i=1;i<=n;i++)
{
cin>>arr[i][1]>>arr[i][2]>>arr[i][3];
arr[i][4]=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if((llabs(arr[j][2]-arr[i][2]))<=arr[j][3])
arr[i][4]++;
}
}
long long int max=arr[1][4];
for(i=2;i<=n;i++)
{
if(arr[i][4]>max)
max=arr[i][4];
}
cout<<max<<endl;
}
}
我是这个网站的初学者,提前谢谢。
答案 0 :(得分:1)
很难在未编译的代码上找到运行时错误...
这是无效的
long long int arr[n][4];
因为你这样做:
int n,i....
但 n 实际上必须是 编译时 常量,这只是因为C ++不允许使用可变长度数组
如果说,数组是0个基本索引数据容器,所以这里引起了一个UB:
for (i = 1; i <= n; i++)
因为您将索引0处的元素保留原样并写入数组范围之外的位置。