0分求调,为什么每次输出都是0??、

P3817 小A的糖果

@[gxa3336](/user/1108083) ``` s=(a[j]+a[j-1]-x); a[j]=(x-a[j-1]); ``` 这两句话调换一下就可以了
by __zaa__ @ 2024-01-25 11:25:16


```c++ #include<bits/stdc++.h> using namespace std; long long n,x,a[1000005],ans=0,s; int main() { cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int j=1;j<=n;j++){ if((a[j]+a[j-1])>x){ int hh=a[j]; a[j]=abs(x-a[j-1]); s=(hh+a[j-1]-x); ans+=s; } else ans+=0; } cout<<ans<<endl; return 0; } ```
by cyh20100812 @ 2024-01-25 11:26:42


@[gxa3336](/user/1108083) 把第12行和第13行调换一下位置就行了,因为当a[j]+a[j-1]>x时,不能先改变a[j]的值,而是先将s的值求出来,不然a[j]+a[j-1]会等于x,ans就一直会是0 ### AC代码如下 ```cpp #include<bits/stdc++.h> using namespace std; long long n,x,a[10000005],ans=0,s; int main() { cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int j=1;j<=n;j++){ if((a[j]+a[j-1])>x){ s=(a[j]+a[j-1]-x); a[j]=(x-a[j-1]); ans+=s; } else ans+=0; } cout<<ans<<endl; return 0; } ```
by hjw100516 @ 2024-01-25 11:27:19


您用的更新后的a[j]去算的差值,,,当然是0啦,,,
by cyh20100812 @ 2024-01-25 11:28:20


|