[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求.攻击最少显然应该对于每一条龙都操作一次,即 ...
随机推荐
- FragmentActivity + Fragment + Fragment使用过程中出现的bug
FragmentActivity + Fragment(通过hide和show来显示fragment) + Fragment(通过viewpager来显示fragment) 在Activity中 // ...
- Android学习笔记之SoftReference软引用,弱引用WeakReference
SoftReference可以用于bitmap缓存 WeakReference 可以用于handler 非静态内部类和匿名内部类容易造成内存泄漏 private Handler mRemoteHand ...
- Android LayoutInflater 类分析
作为一名Android开发者,写页面是最普通不过的事情了,在编写页面的时候,系统给提供了两种形式,一种形式是通过XML的方式进行编写,还有一种形式是通过Java代码直接编写 我们知道Android ...
- 新更新,又是一年了。这次记录下关于android版的WeiboDemo的问题
时隔一年多,现在又开始折腾android的代码了.之前看了Learning android,就想看下能否移植到Weibo.然后就下了weibo的代码,代码包里有个实例叫WeiboSDKDemo. 为了 ...
- Redis进阶学习笔记
Redis是什么这里不用再说了吧?下面是官方的解释 Redis is an open source (BSD licensed), in-memory data structure store, us ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第八天 模块 包 全局变量和内置变量__name__ Python path 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Pyt ...
- sqlmap 基本应用
sqlmap 基本应用: sqlmap详细命令: -is-dba 当前用户权限(是否为root权限) -dbs 所有数据库 -current-db 网站当前数据库 -users 所有数据库用户 -cu ...
- c/c++ 重载运算符 ==和!=的重载
重载运算符 ==和!=的重载 问题:假如有一个类似于vector的类,这个类只能存放string,当有2个这个类的对象时,如何比较这2个对象. 自己重载==和!= 代码(重载==,!=) #inclu ...
- c/c++ linux epoll系列1 创建epoll
linux epoll系列1 创建epoll 据说select和poll的弱点是,随着连接(socket)的增加,性能会直线下降. epoll不会随着连接(socket)的增加,性能直线下降. 知识点 ...