关于printf(C++)的奇怪问题

Vincent++ 2021-02-19 05:48:01
为什么在被强调的printf所在的这个for循环内加入任意一句printf(可输出也可不输出任何东西),才能得到正常的结论??而不加printf会得到奇奇怪怪的答案,而循环中所使用的plustree这个函数,如果没有那个printf就会出错
(原题非公开题目,所以不能展示,这个代码有部分数据是没通过的)
如果有大佬能帮我指出代码里面的的其他错误就更好了
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
const int L=0,R=1;
struct Seg{
int l,r;
int son[2];
int plusm=0;
}c[400005];
int f[200005],s[200005],cnts=0;
int n,m,a[200005],cnt=1;;
void buildtree(int k,int l,int r){
//printf("k%d %d %d\n",k,l,r);
c[k].l=l;c[k].r=r;
if(l==r) return;
int mid=(l+r)/2;
cnt++;c[k].son[L]=cnt;
buildtree(c[k].son[L],l,mid);
cnt++;c[k].son[R]=cnt;
buildtree(c[k].son[R],mid+1,r);
return;
}
void addtree(int k,int l,int r,int v){
if(c[k].l==l&&c[k].r==r){
c[k].plusm+=v;
return;
}
int mid=(c[k].l+c[k].r)/2;
//printf("--%d %d %d %d\n",k,l,r,mid);
if(l<=mid) addtree(c[k].son[L],l,min(mid,r),v);
if(r>mid) addtree(c[k].son[R],max(mid+1,l),r,v);
}
int plustree1(int k,int j){
if(c[k].l==c[k].r){
printf("k=%d-plustree函数返回值 %d\n",k,c[k].plusm);//测试代码
return c[k].plusm;
}
int q;
int mid=(c[k].l+c[k].r)/2;
if(j<=mid) q+=plustree1(c[k].son[L],j);
else q+=plustree1(c[k].son[R],j);
printf("k=%d-plustree函数返回值 %d\n",k,c[k].plusm+q);//测试代码
return c[k].plusm+q;
}
int main(){
f[0]=f[1]=1;
for(int i=2;i<=200005;++i) f[i]=f[i-1]+f[i-2];
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
int root=1;
buildtree(root,1,n);
for(int ii=1;ii<=m;++ii){
int t;
scanf("%d",&t);
if(t==1){
int x,v;
scanf("%d%d",&x,&v);
a[x]=v-plustree1(1,x);
}
if(t==2){
int l,r,su=0;
scanf("%d%d",&l,&r);
int v=r-l;
int suj[205];//suj用于纪录su的变化
for(int i=0;i<=v;++i){
su+=(f[i]*(a[l+i]+plustree1(1,l+i)))%1000000000;
su%=1000000000;printf("");//就是这个printf<<<<<<<<<<<<<<<<<
suj[i]=su;
}
printf("suj数组用于纪录su的变化:\n");
for(int i=0;i<=v;++i){
printf("suj[%d]=%d\n",i,suj[i]);
}

cnts++;
s[cnts]=su;//printf("%d\n",su);
}
if(t==3){
int l2,r2,d;
scanf("%d%d%d",&l2,&r2,&d);
addtree(1,l2,r2,d);
}
}
for(int i=1;i<=cnts;++i){
if(i!=1) printf("\n");
printf("%d",s[i]);
}
return 0;
}

以下是样例数据:
5 4
1 3 1 2 4
3 1 4 1
2 2 4
1 2 10
2 1 5
样例正确答案:
12
45
加入了这个printf的程序结果:

没加这个printf的程序结果:
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzjhjxj 2021-02-19
  • 打赏
  • 举报
回复
	f[0]=f[1]=1;
	for(int i=2;i<=200005;++i) f[i]=f[i-1]+f[i-2];//这里早突破极限了

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧