关于此题的几个神奇问题

P2367 语文成绩

xeri_chen @ 2021-07-20 11:05:37

RE代码 AC代码 为什么这两种定义会不一样啊 把n,p定义为全局变量可以过,放主函数就RE,而且我定义的时候是初始化0了的,就离谱

还有这题数组只开了100010,居然没有越界。

然后最后为啥要取一个max啊,不然就wa了。

而且为啥这份代码跑得这么快啊


by 风中の菜鸡 @ 2021-10-13 21:13:46

@xeri_chen 我们看不到你代码。。。


by wanglinhu_china @ 2021-10-14 20:27:49

妙啊


by xeri_chen @ 2021-10-14 21:18:20

@风中の菜鸡

RE代码

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;

union qzcf//前缀和差分 
{
    int qz,cf;
}a[N];

inline int read() //读入优化
{
    int x=0,k=1;char c=getchar();
    while (c<'0'||c>'9'){if (c=='-') k=-1;c=getchar();}
    while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    return x*k;
}

int s,ans;

int main()
{
    int n=0,p=0;
    scanf("%d%d",&n,&p);
    for(int i=1;i<=n;i++) a[i].qz=read();
    for(int i=n;i>=1;i--) a[i].cf=a[i].qz-a[i-1].qz;

    int x,y,z;
    while(p--)
    {
        x=read();y=read();z=read();
        a[x].cf+=z;
        a[y+1].cf-=z;
    }

    ans=s=a[1].cf;
    for(int i=2;i<=n;i++)
    {
        s+=a[i].cf;
        ans=min(ans,s);
    }
    ans=max(1,ans);
    printf("%d",ans);
    return 0;
}

AC代码

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;

union qzcf//前缀和差分 
{
    int qz,cf;
}a[N];

inline int read() //读入优化
{
    int x=0,k=1;char c=getchar();
    while (c<'0'||c>'9'){if (c=='-') k=-1;c=getchar();}
    while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    return x*k;
}

int s,ans;
int n,p;

int main()
{

    scanf("%d%d",&n,&p);
    for(int i=1;i<=n;i++) a[i].qz=read();
    for(int i=n;i>=1;i--) a[i].cf=a[i].qz-a[i-1].qz;

    int x,y,z;
    while(p--)
    {
        x=read();y=read();z=read();
        a[x].cf+=z;
        a[y+1].cf-=z;
    }

    ans=s=a[1].cf;
    for(int i=2;i<=n;i++)
    {
        s+=a[i].cf;
        ans=min(ans,s);
    }
    ans=max(1,ans);
    printf("%d",ans);
    return 0;
}

by 风中の菜鸡 @ 2021-10-14 21:24:20

@xeri_chen 你re的原因并不是把n,p放在哪,而是数组没开那么大,我帮你开大后就AC了

至于下面那个代码为啥能AC我还没搞明白,可能是数据太水了


by xeri_chen @ 2021-10-14 21:39:23

@风中の菜鸡

两份代码唯一区别就是n,p的位置,没开大但能AC就很奇怪,如果数据水为啥上一个又会RE


by 风中の菜鸡 @ 2021-10-14 21:43:59

@xeri_chen 是,但你第一份代码肯定是没错的,你开大之后两个都能A,所以以后看好数据范围就不会出现奇奇怪怪的事了。


|