C语言 由于超时而终止



我正在解决黑客兰克的这个问题。我提交的代码适用于 13 个测试用例中的 6 个。对于其余测试用例,错误由于超时而终止。

问题陈述

Animesh有N个空糖果罐,编号从1到N,容量无限。他执行 M 操作。每个操作由 3 个整数 a、b 和 k 描述。在这里,a 和 b 是罐子的索引,k 是每个罐子内要添加的糖果数量,其索引介于 a 和 b(包括两者)之间。你能说出M手术后糖果的平均数量吗?

输入格式

第一行包含两个整数 N 和 M,由单个空格分隔。M线紧随其后;它们中的每一个都包含三个整数,a、b 和 k,用空格分隔。

约束

3≤N≤10^7

1≤米≤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]='';
        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]='';
            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 的数量和每次操作中添加的糖果总数。

相关内容

  • 没有找到相关文章

最新更新