Description

Input

Output

Sample Input

2
3 3
3 5 7
4 6 10
7 3 9
1 9 1000
3 2
3 5 6
4 8 7
1 1 1
1 1

Sample Output

59
-1

Solution

当时同步赛的时候写出来了……只不过忘了是爆$long~long$还是小细节写爆了只有$75$……

当时蠢的一比直接强上了一颗$splay$强行增加码量……现在觉得当时太蠢了然后就重写了一遍……

首先对于这个题,每次使用的剑可以发现是固定的,这个可以使用$set$来求出来。

知道了攻击力,知道了龙的血量和回血,就可以$exgcd$求出用多少刀的倍数砍死龙了。这其实是一个同余方程。

把所有同余方程搞出来,然后$exCRT$求解同余方程组就完事了QAQ

记得用快速乘还有特判一下回血全是$1$的情况。

Code

 #include<iostream>
#include<cstdio>
#include<set>
#define N (100009)
#define LL long long
using namespace std; LL T,n,m,x,a[N],p[N],v[N],Ai[N],Mod[N];
multiset<LL>S; LL Mul(LL a,LL b,LL MOD)
{
LL tmp=a*b-(LL)((long double)a*b/MOD+0.1)*MOD;
return tmp<?tmp+MOD:tmp;
} void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
{
if (!b) {d=a; x=; y=; return;}
exgcd(b,a%b,d,y,x); y-=x*(a/b);
} LL Find(LL x)
{
multiset<LL>::iterator it;
it=S.upper_bound(x);
if (it!=S.begin()) it--;
LL ans=*it;
S.erase(it);
return ans;
} LL exCRT()
{
LL M=Mod[],A=Ai[],d,x,y,t;
for (int i=; i<=n; ++i)
{
exgcd(M,Mod[i],d,x,y);
if ((Ai[i]-A)%d) return -;
t=Mod[i]/d; x=(x%t+t)%t; x=Mul(x,(Ai[i]-A)/d,t);
A=M*x+A; M=M/d*Mod[i]; A%=M;
}
A=(A%M+M)%M;
return A;
} int main()
{
scanf("%lld",&T);
while (T--)
{
S.clear();
scanf("%lld%lld",&n,&m);
for (int i=; i<=n; ++i) scanf("%lld",&a[i]);
for (int i=; i<=n; ++i) scanf("%lld",&p[i]);
for (int i=; i<=n; ++i) scanf("%lld",&v[i]);
for (int i=; i<=m; ++i) scanf("%lld",&x), S.insert(x); LL maxn=-,flag=,all_one=;
for (int i=; i<=n; ++i)
{
LL A=Find(a[i]),B=p[i],C=a[i],x,y,d;
exgcd(A,B,d,x,y);
if (C%d) {flag=; break;}
x=(x%B+B)%B;
Ai[i]=Mul(x,C/d,B); Mod[i]=B/d;
if (p[i]!=) all_one=;
maxn=max(maxn,a[i]/A+(a[i]%A!=));
S.insert(v[i]);
} if (!flag) {puts("-1"); continue;}
if (all_one) printf("%lld\n",maxn);
else printf("%lld\n",exCRT());
}
}

BZOJ5418:[NOI2018]屠龙勇士(exCRT,exgcd,set)的更多相关文章

  1. BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set

    题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...

  2. BZOJ5418 NOI2018屠龙勇士(excrt)

    显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod ...

  3. Luogu4774 NOI2018 屠龙勇士 ExCRT

    传送门 原来NOI也会出裸题啊-- 用multiset求出对付每一个BOSS使用的武器威力\(ATK_i\),可以得到\(m\)个式子\(ATK_ix \equiv a_i \mod p_i\) 看起 ...

  4. [NOI2018]屠龙勇士(exCRT)

    首先很明显剑的选择是唯一的,直接用multiset即可. 接下来可以发现每条龙都是一个模线性方程.设攻击第i条龙的剑的攻击力为$s_i$,则$s_ix\equiv a_i\ (mod\ p_i)$. ...

  5. BZOJ 5418: [Noi2018]屠龙勇士 EXCRT+multiset

    题解:求解形如 $A[i]ans\equiv b[i](mod$ $p[i])$ 的 $x$ 的最小正整数解. 考虑只有一个等式,那么可以直接化成 $exgcd$ 的形式:$A[i]ans+p[i]y ...

  6. BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt

    BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt Description www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf 每次用 ...

  7. P4774 [NOI2018]屠龙勇士

    P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) ...

  8. uoj396 [NOI2018]屠龙勇士

    [NOI2018]屠龙勇士 描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 1∼n 顺序杀掉 n 条巨龙,每条巨龙拥有一个初始的生命值 ai .同时每条巨龙拥有恢复能 ...

  9. [洛谷P4774] [NOI2018]屠龙勇士

    洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{* ...

随机推荐

  1. webpack 项目实践

    1,必要的环境 node 环境 下载地址(http://nodejs.cn/) npm 貌似 下载地址(https://www.npmjs.com/)不过,貌似 Node 安装可自带 npm. 2, ...

  2. 一次线上OOM过程的排查

    https://blog.csdn.net/qq_16681169/article/details/53296137 一.出现问题 在前一段时间日常环境很不稳定,前端调用mtop接口会出网络异常或服务 ...

  3. 350-两个阵列的交叉点II

    给定两个数组,编写一个函数来计算它们的交集. 例1: 输入: nums1 = [1,2,2,1],nums2 = [2,2]  输出:[2,2] 例2: 输入: nums1 = [4,9,5],,nu ...

  4. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  5. 海量数据中找出前k大数(topk问题)

    海量数据中找出前k大数(topk问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小 ...

  6. Golang 模板

    最近又尝试了一下 Golang 的 Template,发现一般功能都满足了,而且语法也相对比较简单,所以稍作总结.在 Go语言中,模板有 text/template 和 html/template 两 ...

  7. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4

    复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...

  8. HTML之列表

    列表有三种类型: 有序列表:列表项使用数字来标记 无序列表:列表项使用粗体圆点(典型的小黑圆圈)进行标记. 自定义列表:自定义列表以 <dl> 标签开始.每个自定义列表项以 <dt& ...

  9. 在vue-cli中使用layer中的layData日期组件

    有朋友问我怎么在vue-cli项目中使用layui中的layData组件,有时间从网上查了下写下篇文章. 1.首先去layData官网把文件包下载下来,解压出来的laydate文件夹整个放在vue-c ...

  10. angular2 引入jquery

    (注:以下命令都是在项目文件夹根目录下运行的,保证下载的文件都在项目的node_modules文件夹里面) 1. 运行  npm install jquery -save 后会发现在package.j ...