https://www.acmicpc.net/problem/18222
๋ฌธ์
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด๊ฐ ๋ฌดํํ ๋ฌธ์์ด X๊ฐ ์๋ค. ์ด ๋ฌธ์์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ค.
- X๋ ๋งจ ์ฒ์์ "0"์ผ๋ก ์์ํ๋ค.
- X์์ 0์ 1๋ก, 1์ 0์ผ๋ก ๋ค๋ฐ๊พผ ๋ฌธ์์ด X'์ ๋ง๋ ๋ค.
- X์ ๋ค์ X'๋ฅผ ๋ถ์ธ ๋ฌธ์์ด์ X๋ก ๋ค์ ์ ์ํ๋ค.
- 2~3์ ๊ณผ์ ์ ๋ฌดํํ ๋ฐ๋ณตํ๋ค.
์ฆ, X๋ ์ฒ์์ "0"์ผ๋ก ์์ํ์ฌ "01"์ด ๋๊ณ , "0110"์ด ๋๊ณ , "01101001"์ด ๋๊ณ , โฏ ์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ด์ด์ง๋ค.
"011010011001011010010110011010011001011001101001โฏโฏ"
์์ฐ์ k๊ฐ ์ฃผ์ด์ก์ ๋ X์ k๋ฒ์งธ์๋ ๋ฌด์จ ๋ฌธ์๊ฐ ์ค๋์ง ๊ตฌํ์ฌ๋ผ.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์์ฐ์ k (1 ≤ k ≤ 1018) ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ k๋ฒ์งธ์ ์ค๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ผ.
ํ์ด
์๋ '์ํ์ฐฉ์ค' ์ฝ๋์ฒ๋ผ ๋จ์ ๊ตฌํ์ ํ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ด๋ค.
๊ณต๊ฐ๋ณต์ก๋์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ ๋ค ์ค์ด๊ธฐ ์ํด ๋ถํ ์ ๋ณต์ ์ด์ฉํ์
๋ํ K์ ๋ฒ์๋ 0~10^8์ด๋ค. 10^18๊ณผ ๊ทผ์ฌํ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์ 2^66 ์ ๋๋ก
int๋ก ๋ด์ ์ ์๋ ๊ฐ์ด๋ค
์ฝ๋ ์ ๋ฐ์ long long ์ ์ด์ฉํ์
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long recur(long long k) {
if(k==1) {
return 0;
}
long long pow_of_2 = 1;
while(k>pow_of_2) {
pow_of_2 *= 2;
}
return 1 - recur(k-pow_of_2/2);
}
int main() {
long long k;
cin >> k;
cout << recur(k);
return 0;
}
์ํ์ฐฉ์ค
๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋จ๋ ๋จ์ ๊ตฌํ ์ฝ๋
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
string get_new_string(string s) {
string new_string = "";
for(char c : s) {
if(c=='0') new_string += '1';
else new_string += '0';
}
return new_string;
}
int main() {
int k;
cin >> k;
int length = 0;
string s = "0";
while(length < k) {
length += s.size();
s += get_new_string(s);
}
cout << s[k-1];
return 0;
}
๊ทธ๋์ ๋ถํ ์ ๋ณต์ผ๋ก ๊ฐ์ ํ ์ฝ๋.
ํ์ง๋ง ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int recur(int k) {
if(k==1) {
return 0;
}
int pow_of_2 = 1;
while(k>pow_of_2) {
pow_of_2 *= 2;
}
return 1 - recur(k-pow_of_2/2);
}
int main() {
int k;
cin >> k;
cout << recur(k);
return 0;
}
'๐๏ธ ICPC Sinchon > Divide and Conquer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 24460๋ฒ: ํน๋ณ์์ด๋ผ๋ ๋ฐ๊ณ ์ถ์ด (0) | 2024.08.16 |
---|---|
[BOJ S4][C++] ๋ฐฑ์ค 17266๋ฒ: ์ด๋์ด ๊ตด๋ค๋ฆฌ (0) | 2022.10.13 |