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,所以以后看好数据范围就不会出现奇奇怪怪的事了。