-
algospot - morseAlgorithm/알고스팟 2020. 2. 10. 12:29123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869//algospot - morse#include <iostream>#include <vector>using namespace std;#define INF 1000000000int N, M, K;string s;void init(){cin >> N >> M >> K;s.clear();}int C(int u, int v){v = u-v > v ? v : u-v;long long t = 1;for (int i = 0; i < v; ++i){t = t *(u-i)/(i+1);if (t > INF)return INF + 1;}return t;}void dp(int n, int m, int k){if(n == 0){for(int i = 0; i<m; ++i)s += 'o';return;}else if(m == 0){for(int i = 0; i<n; ++i)s+= '-';return;}int sum = n + m - 1;int temp = C(sum, n - 1);if (temp < k){s += 'o';dp(n, m - 1, k - temp);}else{s += '-';dp(n - 1, m, k);}}int main(){int C;cin >> C;for (int tn = 0; tn < C; ++tn){init();dp(N, M, K);cout << s << "\n";}}
cs https://algospot.com/judge/problem/read/MORSE
algospot.com :: MORSE
모스 부호 사전 문제 정보 문제 모스 부호(Morse code)는 전화가 없던 시절 무선 전신에 주로 사용하던 코드로, 짧은 신호(단점, o)와 긴 신호(장점, -)를 섞어 글자를 표현하는 표현방식입니다. 예를 들어 알파벳 J는 모스 부호 o---로 표현되고, M은 --로 표현됩니다. n개의 장점과 m개의 단점으로 구성된 모든 신호들을 담고 있는 사전이 있다고 합시다. 예를 들어 n = m = 2라면 다음과 같은 신호들이 포함되어 있는 것이죠. --oo
algospot.com
MORSE
k번째 답 계산하기
이항계수는 분자는 내림차순, 분모는 오름차순으로 그때그때 곱하고 나누어주면 나머지가 없는 성질을 이용해 그때그때 구했습니다.
'Algorithm > 알고스팟' 카테고리의 다른 글
algospot - matchfix (0) 2020.02.17 algospot - packing (0) 2020.02.10 algospot - snail (0) 2020.02.08 algospot - numb3rs (0) 2020.02.07 algospot - poly (0) 2020.02.07