题意

考虑杀每只龙\(i\)时候用的剑是一定的,我们可以用multiset模拟一遍得到,设为\(b_i\)。

发现我们要求一个\(x\)满足对每个\(i\)有:\(b_i*x\equiv a_i\pmod{p_i}\)

这很像扩展中国剩余定理,但是系数不是1,于是考虑化简。

假设前\(i-1\)个方程的答案为\(res\),模数的\(lcm\)为\(M\)。

我们要找一个\(t\)满足:\(b_i*(res+t*M)\equiv a_i\pmod{p_i}\)

即:\(b_i*M*t\equiv a_i-b_i*res\pmod{p_i}\)

这时就可以用\(exgcd\)了

注意我们并非求最小整数解,因为有必须把每头龙都打到负血的条件,我们记一个限制,最后找到第一个满足限制的解即可。

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int T,n,m;
ll a[maxn],b[maxn],P[maxn],sword[maxn];
multiset<ll>::iterator it;
multiset<ll>s;
ll exgcd(ll a,ll b,ll& x,ll& y)
{
if(!b){x=1,y=0;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=x;x=y;y=z-(a/b)*y;
return d;
}
inline ll mul(ll x,ll y,ll mod)
{
ll res=0;
while(y)
{
if(y&1)res=(res+x)%mod;
x=(x+x)%mod;y>>=1;
}
return res;
}
inline ll solve()
{
s.clear();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)scanf("%lld",&P[i]);
for(int i=1;i<=n;i++)scanf("%lld",&sword[i]);
for(int i=1;i<=m;i++)
{
ll x;scanf("%lld",&x);
s.insert(x);
}
for(int i=1;i<=n;i++)
{
it=s.upper_bound(a[i]);
if(it!=s.begin())it--;
b[i]=*it;s.erase(it),s.insert(sword[i]);
}
ll maxx=0,res=0,M=1;
for(int i=1;i<=n;i++)
{
maxx=max(maxx,(a[i]-1)/b[i]+1);
ll tmpa=mul(b[i],M,P[i]),tmpb=P[i],tmpc=((a[i]-mul(b[i],res,P[i]))%P[i]+P[i])%P[i];
ll x,y,d=exgcd(tmpa,tmpb,x,y);
x=(x%P[i]+P[i])%P[i];
if(tmpc%d)return -1;
res+=mul(x,tmpc/d,P[i]/d)*M;M*=P[i]/d;
res=(res%M+M)%M;
}
if(res<maxx)res+=((maxx-res-1)/M+1)*M;
return res;
}
int main()
{
scanf("%d",&T);
while(T--)printf("%lld\n",solve());
return 0;
}

最新文章

  1. shell九九乘法表
  2. Java jdbc 连接oracle之三(封装工具类)
  3. windows使用nginx实现网站负载均衡测试实例
  4. 分布式事务操作之Spring+JTA
  5. IQueryable&lt;T&gt; 与 ObjectQuery&lt;T&gt; 差异
  6. Spring @Transactional ——事务回滚
  7. CSS 文字阴影(text-shadow)怎么用
  8. HDU2222 (AC自动机)
  9. (转载)windows下mysql忘记密码
  10. maven工程 java 实现文件上传 SSM ajax异步请求上传
  11. 框架学习之Struts2(二)---基本配置和封装表单数据
  12. Spark技术内幕:Shuffle Map Task运算结果的处理
  13. Flutter自定义路由PageRouteBuilder
  14. 如何理解render: h =&gt; h(App)
  15. HTML,CSS笔记
  16. Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法
  17. 基于matplotlib的数据可视化 - 热图imshow
  18. 特殊权限set_uid /特殊权限set_gid/特殊权限stick_bit/软链接文件/硬连接文件
  19. Java——多线程小例子
  20. NSCache 的好处

热门文章

  1. 算法设计与分析 1.2 不一样的fibonacci数列
  2. Vue 时间修饰符之使用$event和prevent修饰符操作表单
  3. 洛谷 P5686 [CSP-SJX2019]和积和
  4. Zookeeper分布式锁实战
  5. Saiku ui-settings接口404错误避免(二十九)
  6. 【学习笔记】动态规划—各种 DP 优化
  7. RabbitMQ Node.js 示例
  8. 死磕 java同步系列之CountDownLatch源码解析
  9. PlayJava Day004
  10. 《0day安全软件漏洞分析技术》学习笔记