题意
给你两个数组长度分别为n,m;
有这么一种操作,用某个数组的某个子区间元素之和代替这个子区间,这样使得数组长度减少,两个数组都可以进行
问你最后两个数组一摸一样的时候,最大数组长度是多少?如果无法使两个数组一摸一样输出-1
分析
先判断开始数组总和是否相等,不相等是不可能最后两个数组一摸一样的从头和尾两个位置判断是否相等,相等继续如果不相等统计两个数组区间的长度,在比较大小,进行到最后
ps;卡int,卡cin
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1.5e6+5;
const int MAXM = 1.5e6+5;
typedef long long ll;
std::vector<int> v[MAXM];
//int sum[MAXM];
std::vector<int> G[MAXM];
ll a[MAXM],b[MAXM];
int main(){
ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
int n ; cin >> n;
for(int i =1; i <= n ; i++) cin >> a[i],a[i] += a[i-1];
int m ;cin >> m;
for(int i = 1; i <= m; i++) cin >> b[i],b[i] += b[i-1];
if(a[n] != b[m]) return puts("-1"),0;
ll suma = 0,sumb = 0,k = 1,ans = 0;
for(int i = 1; i <= n ; i++){
suma = a[i];
while(suma > sumb) sumb = b[k++];
if(suma == sumb) ans ++;
}
cout << ans << endl;
return 0;
}