Luogu-4774 [NOI2018]屠龙勇士
这题好像只要会用set/平衡树以及裸的\(Excrt\)就能A啊...然而当时我虽然看出是\(Excrt\)却并不会...今天又学了一遍\(Excrt\),趁机把这个坑给填了吧
现预处理一下,找出每条龙用哪吧剑,把所有龙都砍\(tmp\)刀到负血。
设之后每条龙都砍了a刀,对于第\(i\)条龙,剑的攻击力为\(w_i\),恢复能力为\(c_i\),血量为\(b_i\)
则根据题意,满足
\]
\]
将\(w_i,b_i,c_i\)同时除以\(gcd(w_i,c_i)\)然后
\]
这道题就变成了同余方程组求解:
a\equiv b_1inv(w_1)(mod\ c_1)\\
a\equiv b_2inv(w_2)(mod\ c_2)\\
...\\
a\equiv b_ninv(w_n)(mod\ c_n)\\
\end{cases}
\]
解出\(a\),答案就是\(a+tmp\)
代码
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef multiset<ll> MT;
const int maxn=1e5+100;
int n,m;
ll b[maxn],c[maxn],w[maxn],a,bi,ci,k[maxn],sxz[maxn];
bool err;
MT st;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
void exgcd(ll a,ll b,ll &x,ll &y){b?(exgcd(b,a%b,y,x),y-=a/b*x):(x=1,y=0);}
ll inv(ll a,ll b){ll x,y; exgcd(a,b,x,y); return (x%b+b)%b;}
ll e(ll a,ll b,ll p){
ll x=a*b-(ll)((long double)a*b/p+0.5)*p;
return x<0?x+p:x;
}
void excrt(ll bj,ll cj){
if(bi==0&&ci==0){
bi=bj,ci=cj;
return;
}
ll C=bj-bi,d=gcd(ci,cj),P=ci/d*cj;
if(C%d!=0){err=1; return;}
ll K=e(C/d%(cj/d),inv(ci/d,cj/d),(cj/d));
bi=(e(K,ci,P)+bi)%P,ci=P;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
for(int i=1;i<=n;i++) scanf("%lld",&c[i]);
for(int i=1;i<=n;i++) scanf("%lld",&w[i]);
for(int i=1;i<=n;i++)
st.clear(),bi=ci=0,err=0;
for(int i=1;i<=m;i++)
scanf("%lld",&a),st.insert(a),sxz[i]=a;
sort(sxz+1,sxz+m+1);
ll tp=0;
for(int i=1;i<=n;i++){
MT::iterator p=st.lower_bound(b[i]);
if(p==st.end()||(p!=st.begin()&&*p>b[i]))
p--;
k[i]=*p,tp=max(tp,(b[i]-1)/k[i]+1);
st.erase(p);
st.insert(w[i]);
}
for(int i=1;i<=n;i++){
b[i]-=tp*k[i],b[i]=(b[i]%c[i]+c[i])%c[i];
int lp=gcd(k[i],c[i]);
if(b[i]%lp!=0){
err=1;
break;
}
c[i]/=lp,b[i]/=lp,k[i]/=lp;
b[i]=e(b[i],inv(k[i],c[i]),c[i]);
}
for(int i=1;i<=n;i++){
excrt(b[i],c[i]);
if(err)
break;
}
if(err) printf("-1\n");
else printf("%lld\n",(bi%ci+ci)%ci+tp);
}
return 0;
}
Luogu-4774 [NOI2018]屠龙勇士的更多相关文章
- luogu P4774 [NOI2018]屠龙勇士
传送门 这题真的是送温暖啊qwq,而且最重要的是yyb巨佬在Day2前几天正好学了crt,还写了博客 然而我都没仔细看,结果我就同步赛打铁了QAQ 我们可以先根据题意,使用set维护,求出每次的攻击力 ...
- 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 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前 ...
- Luogu P4774 / LOJ2721 【[NOI2018]屠龙勇士】
真是个简单坑题...++ 前置: exgcd,exCRT,STL-multiset 读完题不难发现,攻击每条龙用的剑都是可以确定的,可以用multiset求.攻击最少显然应该对于每一条龙都操作一次,即 ...
- 洛谷P4774 [NOI2018]屠龙勇士 [扩欧,中国剩余定理]
传送门 思路 首先可以发现打每条龙的攻击值显然是可以提前算出来的,拿multiset模拟一下即可. 一般情况 可以搞出这么一些式子: \[ atk_i\times x=a_i(\text{mod}\ ...
- [NOI2018]屠龙勇士
题目描述 题解 考虑增量法. 假设我们已经做完了前k个条件,前面的模数连乘起来的结果为M,答案为X,当前的攻击力为x,龙的血量为a. 那么我们这一次的答案的表达形式是X+t*M的. 这一次需要满足的是 ...
随机推荐
- 谈抽象1——无脑copy等于自杀
近期被外派帮助国内某公司做政府某部门OA系统.听说他们那有个成熟的java框架,使用了非常长时间,抱着学习的态度,我进入这个公司.当我熟悉了一周后,留下了非常多疑问,而这些疑问,也诱发了这次关于&qu ...
- Python 邮箱
#coding:utf-8from email.header import Headerfrom email.mime.text import MIMETextfrom email.utils imp ...
- 【BZOJ1408】[Noi2002]Robot DP+数学
[BZOJ1408][Noi2002]Robot Description Input Output Sample Input 3 2 1 3 2 5 1 Sample Output 8 6 75 HI ...
- node.js 关于跨域和传递给前台参数
/*为app添加中间件处理跨域请求*/ app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin& ...
- 单片机教程4.C语言基础以及流水灯的实现
单片机教程4.C语言基础以及流水灯的实现 C语言,没接触过计算机编程语言的人会把它看的很神秘,感觉非常的难,而在我看来,C语言的逻辑和运算,就是小学水平,所以大家不要怕它,我尽可能的从小学数学逻辑方式 ...
- 企业实施DevOPS的七大挑战(转)
从别人的演讲视频中摘抄,做笔记. 什么是DevOPS 如何衡量DevOPS 企业实施DevOPS的七大挑战 自动化测试投入不足 单元测试 API测试 界面测试 功能测试 高度集中的IT服务 标准化 脚 ...
- iOS 静态库的制作
按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...
- 安装CentOS 7.4 可能会出现的坑以及解决方案
安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...
- wget: unable to resolve host address “http”
[root@one ~]# wget www.baidu.com --2017-09-24 10:20:23-- http://www.baidu.com/ Resolving http... fai ...
- Windows 上将Tomcat 8 安装为系统服务
第一部分 应用场景 需要服务器上Tomcat不显示启动窗口 需要服务器上Tomcat开机自启动 ... 第二部分 配置过程 一.修改配置文件 1 {Tomcat_HOME}/bin/service.b ...