P4774-[NOI2018]屠龙勇士【EXCRT】

1|0正题

题目链接:https://www.luogu.com.cn/problem/P4774


1|1题目大意

n个龙血量为ai,回复能力为pi,死亡后掉落剑的攻击力tim把剑,攻击力为bi

1开始打,每次使用不大于当前龙血量的剑中攻击力最低的一把(没有就用攻击力最低的),造成x×atk点伤害,然后当前的剑坏掉。

求一个最小的x使得所有龙被攻击后血量是pi的倍数。

1n,m105,满足p=1或者aipi,所有pi的公倍数不超过1012


1|2解题思路

额,先用set处理出每个龙用哪把剑打ci,然后就是对于每条龙的条件就是

cixai(mod pi),cixai

后面那个条件可以去掉,我们先求出满足所有cixai的最小x,后面再调整。

然后前面那个东西可以用EXCRT搞了,假设我们上一次求到的答案为ans,目前pi的公倍数是M,那么现在的通解就是ans+Mx。我们需要求出一个x满足

ci(ans+Mx)ai(mod pi)

Mx+piy=aici×ans

然后就可以扩欧合并了。


1|3code

#include<cstdio> #include<cstring> #include<algorithm> #include<cctype> #include<set> #define ll __int128 using namespace std; ll read(){ ll x=0,f=1; char c=getchar(); while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();} while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar(); return x*f; } void print(ll x) {if(x>9)print(x/10);putchar(x%10+48);return;} const ll N=1e5+10; multiset<ll> s; ll n,m,T,a[N],p[N],t[N],c[N]; ll exgcd(ll a,ll b,ll &x,ll &y){ if(!b){x=1;y=0;return a;} ll d=exgcd(b,a%b,x,y); ll z=x;x=y;y=z-a/b*y; return d; } void work(){ n=read();m=read();s.clear(); ll mx=0; for(ll i=1;i<=n;i++)a[i]=read(); for(ll i=1;i<=n;i++)p[i]=read(); for(ll i=1;i<=n;i++)t[i]=read(); for(ll i=1;i<=m;i++){ ll x=read(); s.insert(x); } for(ll i=1;i<=n;i++){ multiset<ll>::iterator it; if(a[i]<*s.begin())it=s.begin(); else it=--s.upper_bound(a[i]); c[i]=*it;s.erase(it);s.insert(t[i]); mx=max(mx,(a[i]-1)/c[i]+1); } ll M=1,x,y,ans=0; for(ll i=1;i<=n;i++){ ll d=exgcd(M*c[i],p[i],x,y); ll w=a[i]-c[i]*ans,v=p[i]/d; if(w%d){puts("-1");return;} x=w/d*x%v;ans=ans+x*M; M=M*v;ans=(ans%M+M)%M; } if(ans<mx)ans+=(mx-ans+M-1)/M*M; print(ans);putchar('\n'); } signed main() { scanf("%lld",&T); while(T--){work();} return 0; }

__EOF__

本文作者QuantAsk
本文链接https://www.cnblogs.com/QuantAsk/p/14430864.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   QuantAsk  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示