gpt4 book ai didi

c - Codechef 提交中出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:41:09 25 4
gpt4 key购买 nike

问题

给定 N 和 M,Dexter 想知道有多少对 a,b(1 <= a < b <=N) 使得 (a+b) 可被 M 整除。例如,当N=4且M=3时,有2个可能的对,它们的和可被M整除,它们是(1,2)和(2,4)。输入

第一行输入包含T(<=100000),即测试用例的数量。接下来的 T 行中的每一行都包含两个整数 N(1 <= N <= 10^9) 和 M(2 <= M <= 10^9)。输出

每个测试用例输出一行,如前所述,对 (a,b) 的数量。

这是 codechef 提出的问题。提交答案后,我收到段错误错误。请帮助我提供正确的答案。

#include<stdio.h>
#include<stdlib.h>

int main()
{
int i,t,flag,j,x,k,m[100],n[100];
scanf("%d",&t);
for(i=1;i<=t;i++)
scanf("%d %d",&n[i],&m[i]);

for(x=1;x<=t;x++){
k=1;
flag=0;

for(i=m[x];i<=((2*n[x])-1);i=(m[x]*k)){
for(j=1;j<=(i/2);j++){
if(((i-j)<=n[x]) && (j!=(i-j))){
flag=flag+1;
}
}
k++;
}
printf("%d\n",flag);
}
}

最佳答案

根据问题陈述,T可能达到100000。当T大于100时,以下陈述

scanf("%d %d",&n[i],&m[i]);

产生未定义的行为,因为 nm 的大小均为 100。

由于每个测试用例都可以单独处理,因此您根本不需要 nm 数组:用标量变量 m 替换它们> 和 n,删除第一个 for 循环,并在第二个循环内调用 scanf:

int i,t,flag,j,x,k,m,n;
scanf("%d",&t);
for(x=1;x<=t;x++) {
scanf("%d %d", &n, &m);
...
}

注意:这将解决崩溃问题,但您需要努力将算法的速度提高到可接受的水平。

关于c - Codechef 提交中出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com