์๋ ํ์ธ์ aim_higher ์ ๋๋ค.
๋ฐฑ์ค 13977๋ฒ : ์ดํญ ๊ณ์์ ์ฟผ๋ฆฌ ์ฝ๋๋ฆฌ๋ทฐ์ ๋๋ค.
Baekjoon Online Judge 11758๋ฒ: CCW
https://www.acmicpc.net/problem/13977
- Number Theory(์ ์๋ก )
๋ฌธ์ ๊ฐ ์ ๋ง ์งง๋ค์. nCk๋ฅผ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
์ฟผ๋ฆฌ๊ฐ ์ด M๊ฐ(M ≤ 100,000), N๊ณผ K๊ฐ(N ≤ 4,000,000, K ≤ N)์ผ๋ก ์ฃผ์ด์ง๋ฏ๋ก
์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ์ด์ ์ด์ ๊ณผ ์ฌ๊ท๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ผ๋ก๋ TLE๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค
ํด๊ฒฐ๊ธฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
์ฐ์ , ์๋ ์ ๋ฐฐ์ ๋ ์กฐํฉ์ ์ฑ์ง์ ๋๋ฌ์ด๋ณด๋ฉฐ ๋ค์์ ์์ ๋ ์ฌ๋ฆฝ๋๋ค.
nCr = n! / r! * (n-r)!
nCr์ด ๋ชจ๋ x! ์ ๊ฐ์ ํฉํ ๋ฆฌ์ผ์ ํํ๋ก ๋ณํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
N์ ๋ฒ์(N ≤ 4,000,000)๊น์ง x! / MOD ๊ฐ์ ๋ฏธ๋ฆฌ ๊ตฌํด ๋๊ณ ์์ ์๋๋ก ๊ณฑํ์๋ ์๊ฐ์ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ r!*(n-r)!์ ์ญ์ ํํ๋ผ MOD๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ทจํ๋ฉด ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค...
๊ทธ๋ฌ๋ฉด ๋๋์ ์ด ์๋ ์ผ๋ฐ์ ์ธ ๊ณฑ์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๊น์?
์ด๋ ์ฌ์ฉ๋๋ ๊ฒ์ด "ํ๋ฅด๋ง์ ์์ ๋ฆฌ" ์ ๋๋ค.
$$a^{\rho}\equiv1(\bmod\rho)$$
์ด ์ํ์์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ฝ๋๋ก ๋ณํํ๋ฉด
$$a^{\rho-1} \text{% } \rho =1$$
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ์๋ณ์ a๋ก ๋๋๋ฉด
$$a^{\rho-2} \text{% } \rho =a^{-1}$$
์ฐ๋ณ์ \(a^{-1}\) ์ญ์๊ผด์ ์ข๋ณ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค๋ ๊ฑธ ์๊ฒ ๋์ต๋๋ค.
a์ r!*(n-r)!์ ๋์ ํ๊ณ , p์ MOD(1,000,000,007)์ ๋์ ํ๋ฉด
$$(r!*(n-r)!)^{MOD-2} \text{% } MOD =(r!*(n-r)!)^{-1}$$
์ด์ ๊ฐ์ด ์ง์ ๊ณฑ์ ํํ๋ก ๋์ต๋๋ค.
์ง์ ๊ณฑ์ ์ ๋ค์ ์ฝ๋์ฒ๋ผ ์คํํ์๋ฉด ๋ฉ๋๋ค.
ll powExp(ll a, ll x){
if (x == 1) return a % MOD;
if (x % 2) return powExp(a, x - 1) * a % MOD;
return powExp(a * a % MOD, x / 2);
}
ํต์ฌ์ ์ง์๊ฐ ์ง์์ผ๋ ๋ฐ์ผ๋ก ์ชผ๊ฐ์ ์ฌ๊ท๋ก ํด๊ฒฐํฉ๋๋ค
์ด๋ฐ ์ฝ๋๋ ์ง๊ด์ ์ผ๋ก ์๊ฐํ๋ฉด O(logN)์ ๋๋ค.
ํฉํ ๋ฆฌ์ผ ์ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ์ํํ์ผ๋ ์ง์๊ณฑ์ ์ ์ธ์๋ก ์ ๋ฌ๋๋ ํฉํ ๋ฆฌ์ผ์ O(1)
์์ฝํ์๋ฉด ์กฐํฉ ๊ณต์ + ํ๋ฅด๋ง์ ์์ ๋ฆฌ + ์ง์ ๊ณฑ์ ์ ๋๋ค.
์ ์ธ๊ฐ์ง๋ฅผ ์ ๊ธฐ์ตํด์ ๋ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ๋์์ ๋ ์์ฉํด๋ด ์๋ค.
'๐ฏ PS (๋ฌธ์ ํด๊ฒฐ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํฌ์ค] Round #812 (Div. 2) (0) | 2023.03.30 |
---|---|
[์ฝ๋ํฌ์ค] Round #811 (Div. 3) (0) | 2023.03.28 |
[์ฝ๋ํฌ์ค] Round #806 (Div. 4) (0) | 2023.03.28 |
[์ฝ๋ํฌ์ค] Round #804 (Div. 2) (0) | 2023.03.28 |
[๋ฐฑ์ค] 11758๋ฒ : CCW (0) | 2023.03.25 |