【excrt】屠龙勇士(luogu 4774)
生活随笔
收集整理的這篇文章主要介紹了
【excrt】屠龙勇士(luogu 4774)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
luogu 4774
題目大意
有n條龍,第i條血量為aia_iai?,回血量為bib_ibi?,殺死后掉落傷害為DiD_iDi?的刀,初始有若干刀
殺第i條龍要用現有傷害比aia_iai?小的刀中傷害最大的(如果沒有就用傷害最小的),對第i條龍造成x次傷害后,龍會連續回血,每次回bib_ibi?,若某一時刻龍的血量為0,那么該龍死亡
現在問你找到最小的x,使其滿足能殺死所有龍
解題思路
對于每條龍所選刀,可以用multiset存現有刀,然后直接查詢符合的
設所選刀傷害為did_idi?,那么答案就是要求:
?(ai?di×x)≡0(modbi)-(a_i-d_i\times x)\equiv 0(\mod b_i)?(ai??di?×x)≡0(modbi?)
di×x≡ai(modbi)d_i\times x\equiv a_i(\mod b_i)di?×x≡ai?(modbi?)
該式子形如crt的式子
因為bib_ibi?不保證互質,所以求解要用excrt
代碼
#include<set> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll __int128 #define N 100100 using namespace std; ll T, n, m, p, x, y, g, X, mx, a[N], mo[N], b[N]; multiset<ll>d; ll exgcd(ll a,ll b, ll &x, ll &y) {if(!b){x = 1;y = 0;return a;}ll k = exgcd(b, a % b, x, y);ll z = y;y = x - a / b * y;x = z;return k; } ll read() {char ch=getchar();ll ds=0,fs=1;while (ch<'0'||ch>'9') {if (ch=='-') fs=-1;ch=getchar();}while (ch>='0'&&ch<='9') ds=(ds<<3)+(ds<<1)+ch-48,ch=getchar();return ds*fs; } void writ(ll c) {if (c/10) writ(c/10); putchar(c%10+48); return;} void write(ll s) {s<0?putchar(45),writ(-s):writ(s); putchar(10);return;} int main() {T = read();while(T--){mx = 0;p = 0;d.clear();n = read();m = read();for (ll i = 1; i <= n; ++i)a[i] = read();for (ll i = 1; i <= n; ++i)mo[i] = read();for (ll i = 1; i <= n; ++i)b[i] = read();for (ll i = 1; i <= m; ++i)d.insert(read());for (ll i = 1; i <= n; ++i)//找刀{multiset<ll>::iterator it = d.upper_bound(a[i]);if (it == d.begin()) x = *it;else x = *--it;d.erase(it);d.insert(b[i]);b[i] = x;mx = max(mx, (a[i] - 1) / b[i] + 1);//最小刀數}m = 1;X = 0;for (ll i = 1; i <= n; ++i)//excrt{g = exgcd(b[i] * m, mo[i], x, y);if ((a[i] - X * b[i]) % g){p = 1;break;}x = x * ((a[i] - X * b[i]) / g) % (mo[i] / g);X = X + x * m;m = m * (mo[i] / g);X = (X % m + m) % m;//最小解}if (p){puts("-1");continue;}if (X < mx) X += (mx - X + m - 1) / m * m;//保證剩余血量>0write(X);}return 0; }總結
以上是生活随笔為你收集整理的【excrt】屠龙勇士(luogu 4774)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置封面文字在页面中竖排居中word
- 下一篇: 不想装截图工具不想装截图工具了