正题

luogu 4774


题目大意

有n条龙,第i条血量为aia_iai​,回血量为bib_ibi​,杀死后掉落伤害为DiD_iDi​的刀,初始有若干刀

杀第i条龙要用现有伤害比aia_iai​小的刀中伤害最大的(如果没有就用伤害最小的),对第i条龙造成x次伤害后,龙会连续回血,每次回bib_ibi​,若某一时刻龙的血量为0,那么该龙死亡

现在问你找到最小的x,使其满足能杀死所有龙


解题思路

对于每条龙所选刀,可以用multiset存现有刀,然后直接查询符合的

设所选刀伤害为did_idi​,那么答案就是要求:

−(ai−di×x)≡0(modbi)-(a_i-d_i\times x)\equiv 0(\mod b_i)−(ai​−di​×x)≡0(modbi​)

di×x≡ai(modbi)d_i\times x\equiv a_i(\mod b_i)di​×x≡ai​(modbi​)

该式子形如crt的式子

因为bib_ibi​不保证互质,所以求解要用excrt


代码

#include<set>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll __int128
#define N 100100
using namespace std;
ll T, n, m, p, x, y, g, X, mx, a[N], mo[N], b[N];
multiset<ll>d;
ll exgcd(ll a,ll b, ll &x, ll &y)
{if(!b){x = 1;y = 0;return a;}ll k = exgcd(b, a % b, x, y);ll z = y;y = x - a / b * y;x = z;return k;
}
ll read()
{char ch=getchar();ll ds=0,fs=1;while (ch<'0'||ch>'9') {if (ch=='-') fs=-1;ch=getchar();}while (ch>='0'&&ch<='9') ds=(ds<<3)+(ds<<1)+ch-48,ch=getchar();return ds*fs;
}
void writ(ll c) {if (c/10) writ(c/10); putchar(c%10+48); return;}
void write(ll s) {s<0?putchar(45),writ(-s):writ(s); putchar(10);return;}
int main()
{T = read();while(T--){mx = 0;p = 0;d.clear();n = read();m = read();for (ll i = 1; i <= n; ++i)a[i] = read();for (ll i = 1; i <= n; ++i)mo[i] = read();for (ll i = 1; i <= n; ++i)b[i] = read();for (ll i = 1; i <= m; ++i)d.insert(read());for (ll i = 1; i <= n; ++i)//找刀{multiset<ll>::iterator it = d.upper_bound(a[i]);if (it == d.begin()) x = *it;else x = *--it;d.erase(it);d.insert(b[i]);b[i] = x;mx = max(mx, (a[i] - 1) / b[i] + 1);//最小刀数}m = 1;X = 0;for (ll i = 1; i <= n; ++i)//excrt{g = exgcd(b[i] * m, mo[i], x, y);if ((a[i] - X * b[i]) % g){p = 1;break;}x = x * ((a[i] - X * b[i]) / g) % (mo[i] / g);X = X + x * m;m = m * (mo[i] / g);X = (X % m + m) % m;//最小解}if (p){puts("-1");continue;}if (X < mx) X += (mx - X + m - 1) / m * m;//保证剩余血量>0write(X);}return 0;
}

【excrt】屠龙勇士(luogu 4774)相关推荐

  1. 【题解】Luogu-P4774 [NOI2018] 屠龙勇士

    与恶龙缠斗过久,自身亦成为恶龙.凝视深渊过久,深渊将回以凝视. ​ --尼采<善恶的彼岸> P4774 [NOI2018] 屠龙勇士 Description\text{Descriptio ...

  2. 屠龙勇士最后都变成了恶龙吗?是!不然你以为恶龙是哪来的?

    "屠龙勇士都变成恶龙了吗?"阿恼问阿灿. "是!不然你以为恶龙是哪来的?"阿灿回答道. "那是先有的屠龙勇士呢,还是先有的恶龙呢?"阿恼接着 ...

  3. NOI2018/LuoGu P4774屠龙勇士

    本蒟蒻终于屠龙成功!! 作为一个我的世界的资深玩家,对屠龙有着无比的信仰和热情!! 首先吐槽一下这只信息龙,它变成负HP后居然不会死,只有他自己回血回到了0HP才算死23333 来我们来看看题意描述, ...

  4. P4774-[NOI2018]屠龙勇士【EXCRT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4774 题目大意 nnn个龙血量为aia_iai​,回复能力为pip_ipi​,死亡后掉落剑的攻击力tit_iti ...

  5. Luogu P4774 / LOJ2721 【[NOI2018]屠龙勇士】

    真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即 ...

  6. 洛谷4774 BZOJ5418 NOI2018 屠龙勇士 扩展中国剩余定理 multiset

    题目链接 题意比较麻烦,感觉我来说也简单不了多少,就不说了,直接看原题吧. 题解: 一道题解咕了大半年的题,现在终于来补锅了.当时网上同步赛的时候我是真的菜啊,那时候就写了一些特殊性质的点,甚至连这是 ...

  7. LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理

    题目:https://loj.ac/problem/2721 1.注意别一输入 p[ i ] 就 a[ i ] %= p[ i ] ,因为在 multiset 里找的时候还需要真实值. 2.注意用 m ...

  8. P4774 [NOI2018]屠龙勇士

    题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 1→n1 \rightarrow n1→n 顺序杀掉 nnn 条巨龙,每条巨龙拥有一个初始的生命值 aia_iai ...

  9. 阿里云盘——屠龙勇士Or搅局者

    前言 11月13号上午我收到了阿里云盘通过邮箱发给我的内测码,我立马下载了阿里云盘手机APP,迫不及待的想试试这期待已久的云盘体验如何. 一.阿里云盘介绍个APP设计 下载后,我打开了这个APP,看看 ...

最新文章

  1. iOS开发之AFNetworking 3.0.4使用
  2. u盘安装linux双系统6,用U盘安装Centos6.5 + Win7 双系统
  3. jmeter constant timer 如何添加_阿里巴巴在开源压测工具 JMeter 上的实践和优化
  4. (转)c#中const与readonly区别
  5. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
  6. 低成本DIY视频预览遥控小车
  7. 数据库课设(足球联赛管理系统)
  8. POI创建的文档具有不同条件的灵活样式
  9. Sublime与远程服务器代码同步工具SFTP
  10. 计算机网络七层体系结构
  11. CSDI2018广州关于《Nginx》的分享(附文字速录与PPT)
  12. 新东方托福词汇(List 16 ~ List 20)
  13. 熊啸锋:在线生成个人网站,如何建立个人网站教程
  14. JAVA基础---函数式接口、Stream流
  15. Android之HttpURLConnection应用实例:武大教务系统获取课表
  16. 基于单片机和labview上位机智能小车设计
  17. Jenkins框架原理
  18. 计算机中乘法是什么函数,excl中的乘法函数符号是什么
  19. 软 RAID 和硬 RAID的比较概览
  20. 华为软件迁移实践微认证试题库

热门文章

  1. mysql 5.6.37 winx64_Mysql 5.6.37 winx64安装双版本mysql笔记记录
  2. linux 连接wifi wpa2,RHEL等Linux系统使用wpa_supplicant以WPA-PSK/WPA2-PSK连接WIFI
  3. php数字转中文数字排序,php实现中文转数字
  4. kuayu react_React+Spring实现跨域问题的完美解决方法
  5. c语言程序设计黄保和第二章,C语言程序设计答案(黄保和编)第6章
  6. leetcode98. 验证二叉搜索树
  7. 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法
  8. 你真的理解事件绑定、事件冒泡和事件委托吗?
  9. 计算机一级办公软件试题,计算机一级《MS Office》练习题(含答案)
  10. [SpringBoot2]welcomefavicon