int fr[13];
int fact[13];
inline void get(int x, int sign) {
int i;
fact[0] = 1;
for(i = 1; i <= 12; i++) {
fact[i] = fact[i - 1] * i;
}
int last = 0;
int sum = 0;
for(i = 1; i <= 6; i++) {
int cur = fact[12 - last - 1] / (fact[6 - i] * fact[6 + i - last - 1]);
for(int j = last + 1; j <= 12; j++) {
if(sum + cur >= x) {
fr[j] += sign;
last = j;
break;
}
else {
sum += cur;
cur = cur * (6 + i - j) / (12 - j);
}
}
}
}
int encode (int N, int x, int y) {
for(int i = 1; i <= 12; i++) {
fr[i] = 0;
}
get(x, 1);
get(y, -1);
for(int i = 1; i <= 12; i++) {
if(fr[i] > 0) {
return i;
}
}
}
int fr[13];
int fact[13];
inline void get(int x, int sign) {
int i;
fact[0] = 1;
for(i = 1; i <= 12; i++) {
fact[i] = fact[i - 1] * i;
}
int last = 0;
int sum = 0;
for(i = 1; i <= 6; i++) {
int cur = fact[12 - last - 1] / (fact[6 - i] * fact[6 + i - last - 1]);
for(int j = last + 1; j <= 12; j++) {
if(sum + cur >= x) {
fr[j] += sign;
last = j;
break;
}
else {
sum += cur;
cur = cur * (6 + i - j) / (12 - j);
}
}
}
}
int decode (int N, int q, int h) {
for(int i = 1; i <= 12; i++) {
fr[i] = 0;
}
get(q, 1);
return fr[h] > 0;
}
Compilation message
encoder.cpp: In function 'int encode(int, int, int)':
encoder.cpp:39:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2181 ms |
84056 KB |
Output is correct - maxh = 12 |
2 |
Correct |
2214 ms |
84120 KB |
Output is correct - maxh = 12 |