[bzoj5418]屠龙勇士
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define ll long long
5 multiset<ll>s;
6 multiset<ll>::iterator it;
7 int T,n,m;
8 ll x,y,sum,a[N],p[N],t[N];
9 bool flag;
10 ll exgcd(ll a,ll b,ll &x,ll &y){
11 if (!b){
12 x=1;
13 y=0;
14 return a;
15 }
16 ll t=exgcd(b,a%b,y,x);
17 y-=a/b*x;
18 return t;
19 }
20 ll mul(ll a,ll b,ll p){
21 if (!b)return 0;
22 ll s=mul(a,b>>1,p);
23 s=s*2%p;
24 if (b&1)s=(s+a)%p;
25 return s;
26 }
27 int main(){
28 scanf("%d",&T);
29 while (T--){
30 scanf("%d%d",&n,&m);
31 for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
32 for(int i=1;i<=n;i++)scanf("%lld",&p[i]);
33 for(int i=1;i<=n;i++)scanf("%lld",&t[i]);
34 s.clear();
35 for(int i=1;i<=m;i++){
36 scanf("%lld",&x);
37 s.insert(x);
38 }
39 for(int i=1;i<=n;i++){
40 it=s.upper_bound(a[i]);
41 if (it!=s.begin())it--;
42 x=*it;
43 s.erase(it);
44 s.insert(t[i]);
45 t[i]=x;
46 }
47 flag=sum=0;
48 for(int i=1;i<=n;i++){
49 sum=max(sum,(a[i]-1)/t[i]);
50 ll d=exgcd(t[i],p[i],x,y);
51 if (a[i]%d){
52 flag=1;
53 break;
54 }
55 p[i]/=d;
56 a[i]=mul(a[i]/d,(x%p[i]+p[i])%p[i],p[i]);
57 }
58 for(int i=2;i<=n;i++){
59 ll d=exgcd(p[1],p[i],x,y);
60 if (a[1]%d!=a[i]%d){
61 flag=1;
62 break;
63 }
64 p[i]/=d;
65 a[1]+=mul((a[i]-a[1])/d,(x%p[i]+p[i])%p[i],p[i])*p[1];
66 p[1]*=p[i];
67 a[1]=((a[1]%p[1])+p[1])%p[1];
68 }
69 if (flag)printf("-1\n");
70 else
71 if (sum<a[1])printf("%lld\n",a[1]);
72 else printf("%lld\n",a[1]+(sum-a[1]+p[1])/p[1]*p[1]);
73 }
74 }
[bzoj5418]屠龙勇士的更多相关文章
- BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set
题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...
- 【BZOJ5418】【NOI2018】屠龙勇士(数论,exgcd)
[NOI2018]屠龙勇士(数论,exgcd) 题面 洛谷 题解 考场上半个小时就会做了,一个小时就写完了.. 然后发现没过样例,结果大力调发现中间值爆\(longlong\)了,然后就没管了.. 然 ...
- 「NOI2018」屠龙勇士(EXCRT)
「NOI2018」屠龙勇士(EXCRT) 终于把传说中 \(NOI2018D2\) 的签到题写掉了... 开始我还没读懂题目...而且这题细节巨麻烦...(可能对我而言) 首先我们要转换一下,每次的 ...
- LOJ #2721. 「NOI2018」屠龙勇士(set + exgcd)
题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或 ...
- P4774 [NOI2018]屠龙勇士
P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) ...
- loj#2721. 「NOI2018」屠龙勇士
题目链接 loj#2721. 「NOI2018」屠龙勇士 题解 首先可以列出线性方程组 方程组转化为在模p意义下的同余方程 因为不保证pp 互素,考虑扩展中国剩余定理合并 方程组是带系数的,我们要做的 ...
- [洛谷P4774] [NOI2018]屠龙勇士
洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{* ...
- 「NOI2018」屠龙勇士
「NOI2018」屠龙勇士 题目描述 小\(D\)最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号\(1-n\)顺序杀掉\(n\) 条巨龙,每条巨龙拥有一个初始的生命 值ai .同时 ...
- POJ1061 青蛙的约会 和 LOJ2721 「NOI2018」屠龙勇士
青蛙的约会 Language:Default 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 133470 Accep ...
随机推荐
- Firewalls文件配置防火墙
1.源文件 /usr/lib/firewalld/services 2.文件配置 cat /etc/firewalld/zones/public.xml <?xml version=" ...
- 点击按钮改变div背景色,再次点击恢复 -- 原生JS
如果对您有帮助,记得点个赞哦!
- python中冒泡排序代码实现
1.冒泡排序代码如下图: #冒泡算法l=[12,4,56,10,6,2]for i in range(0,6): for j in range(i+1,6): if l[i]>l[j]: a=l ...
- 巧用 CSS3 filter(滤镜) 属性
原文链接:CSS3 filter(滤镜) 属性 效果预览 filter: grayscale(100%); 定义和使用 filter 属性定义了元素(通常是<img>)的可视效果(例如:模 ...
- 初学python-day4 字典(已更新完)
- SharkCTF2021 Babyhttp && get_or_lose
两道web. Babyhttp: 直接dirsearch,发现同时存在git和bak泄露:经验证,git的没用. 访问index.php.bak, 下载源码: 抓包,改包,发包即可. get_or_l ...
- 运维常用python库&模块
sutil:是一个跨平台库(https://github.com/giampaolo/psutil)能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和系统资 ...
- 修改git仓库的远程地址
在我们开发的过程中,代码一般是由 git 来管理的,但有些时候我们的 git 仓库的地址可能发生了变换,比如我们使用的 gitLab 地址发生了变化,那么这个时候如何来将原项目的 git 地址进行修改 ...
- 2021.10.9考试总结[NOIP模拟72]
T1出了个大阴间题 状压\(DP\),记当前状态的代价和与方案数.状态\(\Theta(2^nn)\),转移\(\Theta(n)\). 发现每个状态的最大值只会是所选集合的\(max\)或加一.于是 ...
- 转:汇编中EBP寄存器和ESP寄存器的区别
EBP和ESP都是汇编中关于指针的寄存器.但是定义不同: (1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶.(2 ...