E. 被遗忘的计划
别人的简洁写法
#include<bits/stdc++.h>using namespace std;
using ll=long long;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const ll mod=1e9+7;
using vl=vector<ll>;
vl operator *(vl a,vl b)
{vl v(a.size(),-INF);for(int i=0;i<a.size();i++)for(int j=0;j<b.size();j++) v[(i+j)%a.size()]=max(v[(i+j)%a.size()],a[i]+b[j]);return v;
}
vl qmi(vl a,ll b)
{vl v(a.size(),-INF);v[0]=0;while(b){if(b&1) v=v*a;a=a*a;b>>=1;}return v;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n;cin>>n;vl v(n),f(n);for(int i=1;i<=n;i++) cin>>v[i%n];for(int i=0;i<n;i++) cin>>f[i];ll maxv=*max_element(v.begin(),v.end());ll maxf=*max_element(f.begin(),f.end());ll k=maxf/maxv;if(maxf==0||maxf%maxv||k>1e9||k<1) return cout<<-1,0;v=qmi(v,k);cout<<(v==f?k:-1);return 0;
}