入门P1319 压缩技术,C语言,最高80分,求解,感谢大佬

P1319 压缩技术

printfscanf_ @ 2022-03-22 14:36:28

#include <stdio.h>

int main()
{
    int n[210];
    int nn=0;
    int num;
    int sum=0;
    int i=0,j=0,k=0,t=0;

    num=0;
    scanf("%d",&nn);

    while((nn*nn)!=sum)
    {
        scanf("%d",&n[i]);
        sum=sum+n[i];   
        i++;
    }
    t=i;
    for(j=0;j<=t;j++)
    {
        for(i=0;i<n[j];i++)
        {
            if(k==nn) 
            {
                printf("\n");  
                k=0;  
            }
            printf("%d",num);
            k++;
        }

        if(num==1)
        {
            num=0;
        }
        else
        {
            num=1;
        }
    }
    return 0;
}
  1. 此代码80分4测试点TLE,9测试点WA

  2. 但我将 int n[205]改为 int n[201]则变为60分.4点变正确了,3测试点.7测试点.9测试点.WA,6测试点.TLE

  3. 我又将int n[205]改为int n[210]则只剩20分,但是这回9点正确,1.3.5.6.8点TEL,2.7.10WA

我现在不理解的点很多,求大佬帮我解答

  1. 代码主体一样为什么改数组大小,分数就不一样,如果是数组大小不够为什么中间数分数最高,又为什么三组测试点将对的加载一起还能全对
  2. TEl从何而出,是超出时间限制了还是死循环还是有其他原因。为什么改数组长度TLE的位置在不断不断变化,WA的位置也变化
  3. 我下载了3测试点发现输出相同但是为什么没得分 我这几个问题好像都是一个点,但是标上序号似乎还是比较清楚 求大佬解答,十分感谢,万分感谢

by optimize_2 @ 2022-03-22 14:57:58

@printfscanf_ 数组开小了

n 开成 400 并且放到 mian 外面就过了


by optimize_2 @ 2022-03-22 14:58:20

https://www.luogu.com.cn/record/72061154


by printfscanf_ @ 2022-03-22 15:08:55

@optimize_2 谢谢,但是为什么同样的代码放函数里就还是不行呢?


by optimize_2 @ 2022-03-22 15:10:40

@printfscanf_ 可能是放 main 里初始值不是 0 没仔细看


by 龙水流深 @ 2022-03-22 15:29:24

申请的空间不一样。

函数内申请的内存是动态分配的,初值不确定,能申请的空间小。(栈空间)

函数外申请的是在编译期申请的内存,初值为0,能申请的空间大。(堆空间)

综上,数组最好在函数外定义。


by 龙水流深 @ 2022-03-22 15:30:07

@printfscanf_


by Programmer_1745 @ 2022-03-22 15:31:16

这种变量,数组,一定要放在main外面,否则会MLE或者TLE或者RE


by printfscanf_ @ 2022-03-22 16:21:42

@龙水流深 感谢


by printfscanf_ @ 2022-03-22 16:22:06

@Programmer_1745 感谢


by Programmer_1745 @ 2022-03-22 16:28:28

@printfscanf_ 没事没事,有问题在@我好了


| 下一页