6개의 댓글이 있습니다.
-
-
Being -
위에서 설명한 대로 예를 들어 싸이클의 길이가 N이라고 하면
1/2 1/4 1/8 .. 1/(2^N) 이런 조각들을 분배하면 되는 걸텐데요
그 조각들의 상대적인 크기 비율이 2^(N-1), 2^(N-2), ..., 1 이렇구요. 그리고 저 조각들에 대한 분모는 2^N - 1일거구요.
위에서 설명한 대로 분모 분자를 적당히 곱해서 분모를 2^N - 1꼴로 만들었다고 하면
10진수 무한소수를 표기할 때에 73/99 = 0.737373737373 이렇게 되는 것처럼
2진수 무한소수를 표기할 때에 분모가 (2^N - 1)이라면 0.이렇게 나가겠죠. 이렇게 되면 pattern을 구할 때에 굳이 적당히 곱해서 2^N - 1 꼴로 만들 필요 없이 그냥 나눗셈을 해도 똑같은 결론을 얻을 수 있으니까요..ㅎㅎ
16년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
astein
안녕하세요. Astein입니다.
오랜만에 에디토리얼을 쓰는거라 익숙하지가 않네요 ;ㅁ;
TCO'08 Round 3는 3월 2일 새벽 3시에 열렸습니다. 늦은 시간에도 #icpc 채널에서 응원해 주셨던 많은 분들께 감사의 말씀을..
(그리고..... 지못미 JM ㅜㅜ)
간단히 결과만 쓰면 Astein 7등, ryuwonha 9등, lewha0 52등, ainu7 114등으로 이렇게 네 명이 Round 4에 진출하게 되었습니다.
Easy (250 pts.)
*
로, "Him" 패턴은-
로 표시합니다. 만약 길이 60이하의 패턴으로 만드는 것이 불가능하다면impossible
을 리턴하면 됩니다. a와 b는 2^63-1 이하의 수이고, 서로소입니다. [spoiler="더 보기..."]long long a, b;
struct ZenoDivision {
string cycle(string _a, string _b) {
sscanf(_a.c_str(), "%Ld", &a);
sscanf(_b.c_str(), "%Ld", &b);
long long up, down = 0;
for (int i = 0; i < 63; ++i) {
down = down + down + 1;
if (down % b == 0) {
up = (down / b) * a;
string S = "";
for (int j = 0; j < i + 1; ++j) {
if (up & (1LL << j)) S = '*' + S; else S = '-' + S;
}
if (S.size() > 60) break;
return S;
}
}
return "impossible";
}
};
Hard (1000 pts.)
16년 전