1 条题解

  • 0
    @ 2026-6-25 21:52:32

    思路:

    大坝 aia_i22 倍就等于第 ii 和 第 i1i-1 座山的降水量。

    先假设第 11 座山的降水量为 00,用上面所讲的方式依次算出第 2n2\sim n 座山的降水量。最后,如果第 nn 座山和第 11 座山的降水量之和等于第 nn 个大坝的水量,直接输出。

    否则第 11 座山的降水量就为假设的第 11 座山和第 nn 座山的降水量与第 nn 个大坝水量的 22 倍的差,再除以 22,再算出其他山的降水量,最后输出即可。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    long long a[100005],b[100005];
    int main(){
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>a[i];
    	b[0]=0;
    	for(int i=1;i<n;i++) b[i]=2*a[i-1]-b[i-1];
    	if(b[n-1]+b[0]==a[n-1]*2) for(int i=0;i<n;i++) cout<<b[i]<<" ";
    	else{
    		b[0]=abs(b[n-1]+b[0]-a[n-1]*2)/2;
    		for(int i=1;i<n;i++) b[i]=2*a[i-1]-b[i-1];
    		for(int i=0;i<n;i++) cout<<b[i]<<" ";
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    11704
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者