2 solutions
-
0
蒟蒻代码
#include<bits/stdc++.h> using namespace std; int a[10000000]; int b[10000000]; int main(){ int n; cin>>n; int sum=0; int suma=0; int sumb=0; for(int i=0;i<n;i++){ cin>>a[i]; suma=suma+a[i]; } for(int i = 0;i<n;i++){ cin>>b[i]; sumb=sumb+b[i]; } if(suma==sumb){ for(int i=0;i<n;i++){ if(a[i]<b[i]){ sum=sum+b[i]-a[i]; a[i+1]=a[i+1]-(b[i]-a[i]); } else if(a[i]>b[i]){ sum=sum+a[i]-b[i]; a[i+1]=a[i+1]+a[i]-b[i]; } } printf("%d",sum); } else{ cout<<"-1"; } return 0; }
-
0
这题没啥讲的就一个贪心思路,因为移动石头的步骤顺序并不影响最后的总步数,所以我们可以只着眼于当前的石堆,当前石堆石头多了(正数)就把多余的石头给下一个石堆,少了就从下一个石堆拿(即使下一个石堆可能也是负数,那么就当先“欠账”就好)。
#include<iostream> #include<math.h> using namespace std; int a[55],b[55]; int main(){ ios::sync_with_stdio(false); int n,ans=0; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++){ cin>>b[i]; if(a[i]!=b[i])a[i+1]+=a[i]-b[i],ans+=abs(a[i]-b[i]); } if(a[n-1]==b[n-1]) cout<<ans; else cout<<-1; return 0; }
- 1
Information
- ID
- 176
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 83
- Accepted
- 21
- Uploaded By