loj 2721 NOI2018 屠龍勇士

2022-09-11 02:03:14 字數 1952 閱讀 3627

有 \(n\) 條惡龍,每條惡龍有乙個初始生命值 \(a_i\) ,恢復力 \(p_i\) , 擊殺後會掉落一把劍.

初始你有 \(m\) 把劍.

給出每把劍的攻擊力.

現在你打算按照以下方法殺掉所有惡龍

問最小的 \(x\) ,如果不存在能殺掉所有惡龍的 \(x\) ,輸出 \(-1\)

有 \(t\) 組資料

\(n \le 10^5, m \le 10^5, t \le 5, a_i \le 10^\)

所有 \(p_i\) 的最小公倍數 \(\le 10^\)

所有劍的攻擊力 \(\le 10^6\)

很容易用multiset在 \(o(n \log n)\) 的時間得到每條龍會使用哪一把劍.特判了 \(m=0\) 的情況

設當前劍的攻擊力為 \(b\) ,那麼 \(x\) 需要滿足

\[a_i - bx + kp_i = 0, k \ge 0

\]其中 \(k \ge 0\) 的部分可以在最後強制 \(x \ge \lceil \dfrac b \rceil\) 就好了.

現在可以寫作

\[bx + kp_i = a_i

\]這是乙個一元二次方程,由於有 \(n\) 個這樣的方程需要合併,所以我們將它轉化為關於 \(x\) 的同餘方程的形式

具體步驟就是,設 \(d = \gcd(b, p_i)\) ,若 \(d \nmid a_i\) 則一元二次方程無解.否則將 \(b,p_i,a_i\) 同時除以 \(d\) .然後就可以轉化為

\[x \equiv a_i \cdot \dfrac 1b \mod p_i

\]其中 \(b\) 和 \(p_i\) 此時是互質的,用exgcd計算逆元即可.

然後將這 \(n\) 個方程用擴充套件中國剩餘定理合併.時間複雜度 \(o(n \log n)\)

由於 \(p_i\) 的最小公倍數是 \(10^\) 級別的,所以需要快速乘.

總時間複雜度為 \(o(n \log n)\)

#include #include #include #define debug(...) fprintf(stderr,__va_args__)

using namespace std;

inline char nc()

templatevoid read(t &x)

while(ch>='0'&&ch<='9')

x*=f;

}templateinline bool cmax(t &x, t y)

typedef long long ll;

typedef long double ld;

const int maxn = 1e5 + 50;

int t;

int n, m;

int c[maxn];

ll a[maxn], p[maxn];

multisets;

inline ll mul(ll x, ll y, ll mod)

ll gcd(ll a, ll b)

ll exgcd(ll a, ll b, ll &x, ll &y)

ll d = exgcd(b, a % b, y, x);

y -= a / b * x;

return d;

}inline ll inver(ll a, ll p)

bool excrt(ll &m0, ll &a0, ll m1, ll a1)

ll solve()

if(a < mn) a += (mn - a + m - 1) / m * m;

else if(a > mn) a -= (a - mn) / m * m;

return a;

}int main()

printf("%lld\n", solve());

} return 0;

}

學會了一元二次方程轉同餘方程的方法.

LOJ 2303 NOI2017 蚯蚓排隊

n leq 200000 的 1 leq a i leq 6 的蚯蚓,有三種操作 讓乙隻隊頭蚯蚓接在乙隻隊尾蚯蚓後面 讓一隊蚯蚓從某個蚯蚓後面斷成兩隊 問 給個字串,問他的。算了你們直接看題吧 這什麼沙雕題qaq 所有詢問的串只有 nk 種,把他們全丟進hash裡面就好了。注意雙hash,乙個用來當...

loj 2719 NOI2018 氣泡排序

t 5,sum n le 2000000 考慮什麼樣的排列是好的.為了達到下界,p i 應該只向 i 的方向移動,也就是說,不存在乙個數左右都有逆序對,也就是說,不存在 a使得 p a p b p c 無視 q 的限制,可以用dp計算答案,設 dp i,j 表示確定了排列的前 i 個數,設其中最大值...

LOJ3342 NOI2020 製作菜品

題目鏈結 博主有幸參加了noi2020,考場上的經歷和心得請見這篇文章。這裡就不嘮叨了。本題的突破口在於 m 和 n 的關係。也就是資料範圍表裡這些奇怪的限制 m n 1 m geq n 1 m geq n 2 我們乙個乙個來看。顯然,n 種原材料,除了在輸出答案時,其他時候它們的原始順序對我們解題...