P4774 [NOI2018]屠龙勇士
P4774 [NOI2018]屠龙勇士
先平衡树跑出打每条龙的atk t[]
然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\)
就是\(xt+kp[i]=a[i]\)
求出一个满足条件的\(x_0\),通解是\(x=x_0+k*\text{gcd}(t,p[i])\)
就是\(x \equiv x_0 (\text{mod }\text{gcd}(t,p[i]))\)
然后就有n个这样的式子,用excrt,合并方程
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
#define int long long
il int gi(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int a[100010],p[100010],ATK[100010],Atk[100010],t[100010];
std::multiset<int>ST;
il int mult(int a,int b,int mod){
if(llabs(a)<llabs(b))std::swap(a,b);
if(b<0)b=-b,a=-a;
int ret=0;
while(b){
if(b&1)ret=(ret+a)%mod;
a=(a<<1)%mod;b>>=1;
}
return (ret+mod)%mod;
}
il int gcd(int a,int b){return b?gcd(b,a%b):a;}
il int exgcd(int a,int b,int&x,int&y){
if(b==0){x=1,y=0;return a;}
else{
int ret=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return ret;
}
}
il int inv(int a,int b){
int x,y;exgcd(a,b,x,y);
while(x<0)x+=b;
return x;
}
int M[100010],Mod[100010];
main(){
int T=gi(),n,m;
while(T--){
n=gi(),m=gi();
for(int i=1;i<=n;++i)a[i]=gi();
for(int i=1;i<=n;++i)p[i]=gi();
for(int i=1;i<=n;++i)ATK[i]=gi();
for(int i=1;i<=m;++i)Atk[i]=gi(),ST.insert(Atk[i]);
for(int i=1;i<=n;++i){
std::multiset<int>::iterator it=ST.upper_bound(a[i]);
if(it==ST.begin())t[i]=*it;
else --it,t[i]=*it;
ST.erase(it);
ST.insert(ATK[i]);
}
ST.clear();
bool flg=1;
for(int i=1;i<=n;++i)if(p[i]!=1)flg=0;
if(flg){
int ans=0;
for(int i=1;i<=n;++i)ans=std::max(ans,(a[i]+t[i]-1)/t[i]);
printf("%lld\n",ans);
continue;
}
#define GG(a) {printf("%d\n",a);goto ed;}
for(int i=1;i<=n;++i){
int x,y;
int g=exgcd(t[i],p[i],x,y);
if(a[i]%g)GG(-1);
int P=p[i]/g;
x=(x%P+P)%P;
M[i]=mult(x,a[i]/g,P),Mod[i]=P;
}
{
int lM=M[1],lMod=Mod[1];
for(int i=2;i<=n;++i){
int m1=lMod,m2=Mod[i],c1=lM,c2=M[i],g=gcd(m1,m2);
if((c2-c1)%g)GG(-2);
int m3,c3;
m3=(m1/g*m2);
c3=mult(mult(inv(m1/g,m2/g),(c2-c1)/g,m3)%(m2/g),m1,m3)+c1;
c3=(c3%m3+m3)%m3;
lM=c3,lMod=m3;
}
printf("%lld\n",lM);
}
ed:;
}
return 0;
}
P4774 [NOI2018]屠龙勇士的更多相关文章
- [洛谷P4774] [NOI2018]屠龙勇士
洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{* ...
- 洛谷 P4774 [NOI2018] 屠龙勇士
链接:P4774 前言: 交了18遍最后发现是多组数据没清空/ll 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前 ...
- 洛谷P4774 [NOI2018]屠龙勇士 [扩欧,中国剩余定理]
传送门 思路 首先可以发现打每条龙的攻击值显然是可以提前算出来的,拿multiset模拟一下即可. 一般情况 可以搞出这么一些式子: \[ atk_i\times x=a_i(\text{mod}\ ...
- luogu P4774 [NOI2018]屠龙勇士
传送门 这题真的是送温暖啊qwq,而且最重要的是yyb巨佬在Day2前几天正好学了crt,还写了博客 然而我都没仔细看,结果我就同步赛打铁了QAQ 我们可以先根据题意,使用set维护,求出每次的攻击力 ...
- (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...
- BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set
题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...
- 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 .同时每条巨龙拥有恢复能 ...
- Luogu P4774 / LOJ2721 【[NOI2018]屠龙勇士】
真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即 ...
随机推荐
- 简单解析Spring核心IOC容器原理
将大体流程解析了一边,具体可以看源代码一个方法一个方法的跟下 XmlBeanFactory的功能是建立在DefaultListableBeanFactory这个基本容器的基础上的,并在这个基本容器的基 ...
- AFNetworking 2.5.x 网络请求的封装
AFNetworking 2.5.x 网络请求的封装 源码地址 https://github.com/YouXianMing/Networking 说明 1. 将block形式的请求转换成用代理来处理 ...
- 获取INET4与INET6的信息
获取INET4与INET6的信息 参考书籍: 本人封装的源码: // // IPAddressInfo.h // YXNETWORK // // http://www.cnblogs.com/YouX ...
- windows下安装Mysql(图文详解)
博客园 | 首页 | 新随笔 | 联系 | 订阅 | 管理 mysql安装过程及注意事项: 1.1. 下载: 我下载的是64位系统的zip包: 下载地址:https://dev.mysql.com ...
- 企业级NFS网络文件共享服务_【all】
1.1. 什么是NFS(1台机器提供服务) Network File System(网络文件系统)通过局域网让不同的主机系统之间共享文件或目录. NFS客户端可以通过挂载的方式将NFS服务器端共享的数 ...
- 18年11月5日 NOIP模拟赛
T1 题解 对于k=100的情况,贪心 对于100%的数据 可以发现,当前的决策只对后面的开采有影响,且剩余耐久度与之后的开采收益成正比,如果倒着考虑这个问题,得出i-n的星球1点耐久度所能获得的最大 ...
- idea html热部署
IDEA SpringBoot 热部署+html修改无需make自动刷新 收藏 HeyS1 发表于 3个月前 阅读 310 收藏 2 点赞 0 评论 0 特邀IBM大咖的主题沙龙,5月20日·北京·3 ...
- super深究
super的入门使用: 在类的继承中,如果定义某个方法,该方法会覆盖父类的同名方法,但有时候我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可以通过使用super来实现.比如: cla ...
- Spring 读取配置文件的俩种方式
读取配置可通过 org.springframework.core.env.Environment 类来获取, 也可以通过@Value的方式来获取 注解形式: @PropertySource({&quo ...
- 解决hibernate双向关系造成的一方重复执行SQl,或者死循环的问题
系统采用struts-json hibernate3. 在对关联表配置manytoone onetomany双向关联的时候,在执行一方的时候,会发现打印出来的SQL语句多执行了一次或者多次.经过调试, ...