由于超时而终止
Terminated due to timeout
我正在解决 this question 关于 hackerrank 的问题。我提交的代码适用于 13 个测试用例中的 6 个。对于其余的测试用例,错误是由于超时而终止。
问题陈述
Animesh有N个空糖罐,编号从1到N,容量无限。他执行 M 操作。每个操作由 3 个整数 a、b 和 k 描述。这里,a和b是罐子的索引,k是索引在a和b之间(包括两者)的每个罐子中要添加的糖果数量。你能说出 M 次操作后的平均糖果数吗?
输入格式
第一行包含两个整数,N 和 M,由一个 space 分隔。
接下来是 M 行;他们每个人都包含三个整数,a,b和k,由spaces.
分隔
限制条件
3≤N≤10^7
1≤M≤10^5
1≤a≤b≤N
0≤k≤10^6
输出格式
一行包含 N 个罐子的平均糖果数,向下舍入到最接近的整数。
注:四舍五入表示找到小于或等于给定数的最大整数。例如。 13.65 和 13.23 向下舍入为 13,而 12.98 向下舍入为 12。
样本输入
5 3
1 2 100
2 5 100
3 4 100
示例输出
160
说明
最初每个罐子里有 0 个糖果
0 0 0 0 0
第一次操作:
100 100 0 0 0
第二次操作:
100 200 100 100 100
第三次操作:
100 200 200 200 100
总计 = 800,平均 = 800/5 = 160
代码
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define size 50
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
long n,m,a,b,k,*arr,i=0,sum=0;
char *buff=NULL;
buff=malloc(50);
if(fgets(buff,size,stdin)!=NULL)
{
if(strlen(buff)>0 && buff[strlen(buff)-1]=='\n')
buff[strlen(buff)-1]='[=11=]';
sscanf(buff,"%ld %ld",&n,&m);
}
else
exit(0);
arr=malloc(sizeof(long)*n+1);
for(i=0;i<n;i++)
arr[i]=0;
i=0;
while(i++<m)
{
if(fgets(buff,size,stdin)!=NULL)
{
if(strlen(buff)>0 && buff[strlen(buff)-1]=='\n')
buff[strlen(buff)-1]='[=11=]';
sscanf(buff,"%ld %ld %ld",&a,&b,&k);
while(a<=b)
{
arr[a-1]+=k;
a++;
}
}
else
exit(0);
}
for(i=0;i<n;i++)
sum+=arr[i];
printf("%ld",sum/n);
return 0;
}
代码不适用于这些测试用例
您无需知道每个罐子中糖果的最终数量即可计算平均值。你只需要N个罐子和每次操作添加的糖果总数。
我正在解决 this question 关于 hackerrank 的问题。我提交的代码适用于 13 个测试用例中的 6 个。对于其余的测试用例,错误是由于超时而终止。
问题陈述
Animesh有N个空糖罐,编号从1到N,容量无限。他执行 M 操作。每个操作由 3 个整数 a、b 和 k 描述。这里,a和b是罐子的索引,k是索引在a和b之间(包括两者)的每个罐子中要添加的糖果数量。你能说出 M 次操作后的平均糖果数吗?
输入格式
第一行包含两个整数,N 和 M,由一个 space 分隔。 接下来是 M 行;他们每个人都包含三个整数,a,b和k,由spaces.
分隔限制条件
3≤N≤10^7
1≤M≤10^5
1≤a≤b≤N
0≤k≤10^6
输出格式
一行包含 N 个罐子的平均糖果数,向下舍入到最接近的整数。
注:四舍五入表示找到小于或等于给定数的最大整数。例如。 13.65 和 13.23 向下舍入为 13,而 12.98 向下舍入为 12。
样本输入
5 3
1 2 100
2 5 100
3 4 100
示例输出
160
说明
最初每个罐子里有 0 个糖果
0 0 0 0 0
第一次操作:
100 100 0 0 0
第二次操作:
100 200 100 100 100
第三次操作:
100 200 200 200 100
总计 = 800,平均 = 800/5 = 160
代码
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define size 50
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
long n,m,a,b,k,*arr,i=0,sum=0;
char *buff=NULL;
buff=malloc(50);
if(fgets(buff,size,stdin)!=NULL)
{
if(strlen(buff)>0 && buff[strlen(buff)-1]=='\n')
buff[strlen(buff)-1]='[=11=]';
sscanf(buff,"%ld %ld",&n,&m);
}
else
exit(0);
arr=malloc(sizeof(long)*n+1);
for(i=0;i<n;i++)
arr[i]=0;
i=0;
while(i++<m)
{
if(fgets(buff,size,stdin)!=NULL)
{
if(strlen(buff)>0 && buff[strlen(buff)-1]=='\n')
buff[strlen(buff)-1]='[=11=]';
sscanf(buff,"%ld %ld %ld",&a,&b,&k);
while(a<=b)
{
arr[a-1]+=k;
a++;
}
}
else
exit(0);
}
for(i=0;i<n;i++)
sum+=arr[i];
printf("%ld",sum/n);
return 0;
}
代码不适用于这些测试用例
您无需知道每个罐子中糖果的最终数量即可计算平均值。你只需要N个罐子和每次操作添加的糖果总数。