Algorithm๐Ÿฅ‡

2004.์กฐํ•ฉ0์˜๊ฐœ์ˆ˜

hae02y 2023. 10. 19. 15:59
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

$n \choose m$์˜ ๋์ž๋ฆฌ $0$์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, โ‰ 0$n \ne 0$)์ด ๋“ค์–ด์˜จ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— $n \choose m$์˜ ๋์ž๋ฆฌ $0$์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 50057 14119 11624 28.691%

https://www.acmicpc.net/problem/2004

ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„

ํŒฉํ† ๋ฆฌ์–ผ0์˜ ๊ฐœ์ˆ˜ ๋ฌธ์ œ ์ฒ˜๋Ÿผ 2์™€ 5์˜ ์Šน์ˆ˜๊ฐ€ ๊ฒน์น˜๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 25C12 ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ

25! / 13! * 12! ์œผ๋กœ ํ‘œํ˜„๋ ๊ฒƒ์ด๋‹ค. ์ฆ‰ n! / (n-m)! * m! ์ด๊ณ  n! , (n-m)!, m! ์—์„œ 2์™€ 5์˜ ์Šน์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

a1 : 2์˜ ์Šน์ˆ˜ , b : 5์˜ ์Šน์ˆ˜
n! = {2,5}(a1,b1)   ,(n-m)! = {2,5}(a2,b2)    , m! = {2,5}(a3,b3)

๊ฒฐ๊ณผ์ ์œผ๋กœ,
2์˜ ์Šน์ˆ˜๋Š” (a1 - a2 - a3) , 5์˜์Šน์ˆ˜๋Š” (b1-b2-b3)

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 2์™€ 5์˜ ์Šน์ˆ˜์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class ์กฐํ•ฉ0์˜๊ฐœ์ˆ˜ {  

    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

        String[] split = br.readLine().split(" ");  

        long n = Long.parseLong(split[0]);  
        long m = Long.parseLong(split[1]);  

        long count5 = count5(n) - count5(n-m) - count5(m);  
        long count2 = count2(n) - count2(n-m) - count2(m);  


        System.out.println(Math.min(count5,count2));  
        br.close();  

    }  

    public static int count5(long num){  
        int count = 0;  

        while (num >=5){  
            count = (int) (count + (num/5));  
            num = num/5;  
        }  
        return count;  
    }  


    public static int count2(long num){  
        int count = 0;  

        while (num >=2){  
            count = (int) (count + (num/2));  
            num = num/2;  
        }  
        return count;  
    }  
}
๋ฐ˜์‘ํ˜•