因为移动石头的步骤顺序并不影响最后的总步数,所以我们可以只着眼于当前的石堆,当前石堆石头多了(正数)就把多余的石头给下一个石堆,少了就从下一个石堆拿(即使下一个石堆可能也是负数,那么就当先“欠账”就好)。
#include<iostream> #include<cmath> using namespace std; int main() { int n,a[50],b[50]; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { cin>>b[i]; a[i]=a[i]-b[i]; } int count=0; for(int i=0;i<n-1;i++) { a[i+1]+=a[i]; count+=abs(a[i]); } if(a[n-1]==0) cout<<count; else cout<<-1; return 0; }