1036D Vasya and Arrays (貪心)
阿新 • • 發佈:2019-02-12
題意:有兩個長度為n和m的序列A和B,每次操作可以將序列連續的幾個數合併為1個,該數的值是那連續幾個數的和。現在進行若干次操作讓A和B相等,問操作形成的相等序列的最大長度是多少。
題解:從左向右掃,並記錄A和B序列的和sum1、sum2,每當和相等時,結果+1,sum1與sum2清0
#include<bits/stdc++.h> #include<cstring> using namespace std; #define ll long long ll a[300010],b[300010]; int main() { int n; scanf("%d",&n); ll sum1=0; for(int i=1; i<=n; ++i) { scanf("%I64d",&a[i]); sum1+=a[i]; } int m; scanf("%d",&m); ll sum2=0; for(int i=1; i<=m; ++i) { scanf("%I64d",&b[i]); sum2+=b[i]; } if(sum1!=sum2) return puts("-1"); int pos1=1,pos2=1; sum1=0;sum2=0; int ans=0; while(pos1<=n && pos2<=m) { if(sum1==sum2 && sum1>0) { ans++; sum1=0; sum2=0; } if(sum1>sum2) sum2+=b[pos2++]; else //sum1<sum2 sum1+=a[pos1++]; } if(sum1 || sum2) ans++; printf("%d\n",ans); return 0; }