[NOI2018]屠龙勇士
题解
考虑增量法。
假设我们已经做完了前k个条件,前面的模数连乘起来的结果为M,答案为X,当前的攻击力为x,龙的血量为a。
那么我们这一次的答案的表达形式是X+t*M的。
这一次需要满足的是x(X+t*M)≡a(%p).
只有t一个未知量,用exgcd就可以解了。
然后就是恶心的特判了。。。
代码
#include<iostream>
#include<cstdio>
#include<set>
#include<cmath>
#define N 100002
using namespace std;
typedef long long ll;
ll x,y,p[N],a[N],b[N],M,X,n,m,tag,t;
multiset<ll>s;
multiset<ll>::iterator it;
inline ll rd(){
ll x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
inline ll power(ll x,ll y,ll mod){
x=(x%mod+mod)%mod;y=(y%mod+mod)%mod;
ll ans=;
while(y){
if(y&)(ans+=x)%=mod;
(x<<=)%=mod;
y>>=;
}
return ans;
}
void exgcd(ll a,ll b){
if(!b){x=;y=;return;}
exgcd(b,a%b);
ll k=x;x=y;y=k-a/b*y;
}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void EXCRT(ll a,ll b,ll c){
ll aa=x*M,bb=c,cc=b-a*X;
ll g=gcd(aa,bb);
if(cc%g){tag=;return;}
if(c==){
bb/=g;
ll p=M;M*=bb;
X+=max(0ll,(ll)ceil((double)((double)b/a-X)/p))*p;
return;
}
aa/=g;bb/=g;cc/=g;
exgcd(aa,bb);
x=power(x,cc,bb);
ll p=M;M*=bb;
x=power(x,p,M);
X=(X+x)%M;
}
int main(){
// freopen("1.in","r",stdin);
t=rd();
while(t--){
n=rd();m=rd();tag=;s.clear();M=;X=;
for(int i=;i<=n;++i)a[i]=rd();
for(int i=;i<=n;++i)p[i]=rd();
for(int i=;i<=n;++i)b[i]=rd();
for(int i=;i<=m;++i)x=rd(),s.insert(x);
for(int i=;i<=n;++i){
it=s.upper_bound(a[i]);if(it!=s.begin())--it;
x=*it;s.erase(it);
EXCRT(x,a[i],p[i]);
if(tag)break;
s.insert(b[i]);
}
if(tag)printf("-1\n");
else cout<<X<<endl;
}
return ;
}
[NOI2018]屠龙勇士的更多相关文章
- BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set
题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...
- P4774 [NOI2018]屠龙勇士
P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) ...
- [洛谷P4774] [NOI2018]屠龙勇士
洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{* ...
- BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt
BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt Description www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf 每次用 ...
- uoj396 [NOI2018]屠龙勇士
[NOI2018]屠龙勇士 描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 1∼n 顺序杀掉 n 条巨龙,每条巨龙拥有一个初始的生命值 ai .同时每条巨龙拥有恢复能 ...
- 洛谷 P4774 [NOI2018] 屠龙勇士
链接:P4774 前言: 交了18遍最后发现是多组数据没清空/ll 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前 ...
- 洛谷P4774 [NOI2018]屠龙勇士 [扩欧,中国剩余定理]
传送门 思路 首先可以发现打每条龙的攻击值显然是可以提前算出来的,拿multiset模拟一下即可. 一般情况 可以搞出这么一些式子: \[ atk_i\times x=a_i(\text{mod}\ ...
- LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】
好久没写了,写一篇凑个数. 题目分析: 这题不难想,讲一下中国剩余定理怎么扩展. 考虑$$\left\{\begin{matrix}x \equiv a\pmod{b}\\ x \equiv c\pm ...
- Luogu P4774 / LOJ2721 【[NOI2018]屠龙勇士】
真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即 ...
随机推荐
- C# MessageBox自动关闭
本文以一个简单的小例子,介绍如何让MessageBox弹出的对话框,在几秒钟内自动关闭.特别是一些第三方插件(如:dll)弹出的对话框,最为适用.本文仅供学习分享使用,如有不足之处,还请指正. 概述 ...
- iOS开发者学习Flutter
Flutter for iOS 开发者 本文档适用那些希望将现有 iOS 经验应用于 Flutter 的开发者.如果你拥有 iOS 开发基础,那么你可以使用这篇文档开始学习 Flutter 的开发. ...
- 图像分析函数:skimage.measure中的label、regionprops
算法解释详细,有算法执行过程动态GIF图的:https://blog.csdn.net/icvpr/article/details/10259577 算法文字解释的简介易懂的:https://www. ...
- 文件比较命令(comp)
comp命令: // 描述: 逐字节比较两个文件或文件集的内容. 如果在没有参数的情况下使用,comp会提示你输入要比较的文件. // 语法: comp [<Data1>] [<Da ...
- LeetCode算法题-Island Perimeter(Java实现)
这是悦乐书的第238次更新,第251篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第105题(顺位题号是463).您将获得一个二维整数网格形式的地图,其中1代表土地,0代 ...
- Java程序设计与数据结构导论--读后感
与我前面所读的<Java7基础教程>相比,此书不适合自学,更适合作为教材使用. 虽然此书完整覆盖了Java的知识点和数据结构的基础问题,并且对每个部分都做了基本说明.但是因为没有深入展开, ...
- Redis学习笔记(2)——Redis的下载安装部署
一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...
- Python开发【前端篇】HTML5+CSS3
CSS权重 CSS权重指的是样式的优先级,有两条或多条样式作用于一个元素,权重高的那条样式对元素起作用,权重相同的,后写的样式会覆盖前面写的样式. 权重的等级 可以把样式的应用方式分为几个等级,按照等 ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)
很高兴地告诉大家,具备新的里程碑意义的功能的Kafka 0.11.x版本(对应 Confluent Platform 3.3)已经release,该版本引入了exactly-once语义,本文阐述的内 ...
- Use of Recv-Q and Send-Q
From my man page: Recv-Q Established: The count of bytes not copied by the user program connected to ...