rt,寄录,看题解了,式子推的都一样,但是总是过不了
atk.clear();minn=0;
int n=read(),m=read();
for(int i=1;i<=n;++i)ai[i]=read();
for(int i=1;i<=n;++i)pi[i]=read();
for(int i=1;i<=n;++i)bonus[i]=read();
for(int i=1;i<=m;++i)atk.insert(read());
//cerr<<atk.size()<<endl;
for(int i=1;i<=n;++i)
{
itor it=atk.begin();
if(*it<ai[i])it=--atk.upper_bound(ai[i]);
// if(it==atk.end())cerr<<"gun"<<endl;
// cerr<<*it<<endl;
u[i]=*it;minn=max(minn,(ai[i]-1)/u[i]+1);
ai[i]%=pi[i];
atk.erase(it);atk.insert(bonus[i]);
}
lll finalm=pi[1];lll ans=0;
lll k,t;lll gcd=exgcd(k,ans,pi[1],u[1]);
if(ai[1]%gcd)
{
cout<<-1<<endl;
// deb;
continue;
}
ans=ai[1]/gcd*ans%(pi[1]/gcd);
for(int i=2;i<=n;++i)
{
// it=atk.begin();
// if(*it<ai[i])it=--atk.upper_bound(ai[i]);
// if(it==atk.end())cerr<<"gun"<<ai[i]<<endl;
// cerr<<*it<<' '<<modinv(*it,pi[i])<<endl;
// ai[i]=ai[i]*modinv(*it,pi[i])%pi[i];
lll res=((ai[i]-u[i]*ans)%pi[i]+pi[i])%pi[i];
gcd=exgcd(k,t,pi[i],finalm*u[i]);
if(res%gcd)
{
cerr<<"end at "<<i<<endl;
ans=-1;break;
}
t=res/gcd*t%(pi[i]/gcd);
ans+=t*finalm;
finalm=finalm/_gcd(finalm,pi[i])*pi[i];
ans=(ans%finalm+finalm)%finalm;
}
if(ans<0)cout<<-1;
else
{
if(ans<minn)ans+=((minn-ans-1)/finalm+1)*finalm;
write(ans);
}
putchar(endl);
注释中能看出来精神状态良好