2 solutions

  • 0
    @ 2021-12-14 21:07:06

    蒟蒻代码

    #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
      @ 2021-11-20 12:21:44

      这题没啥讲的就一个贪心思路,因为移动石头的步骤顺序并不影响最后的总步数,所以我们可以只着眼于当前的石堆,当前石堆石头多了(正数)就把多余的石头给下一个石堆,少了就从下一个石堆拿(即使下一个石堆可能也是负数,那么就当先“欠账”就好)。

      #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