# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
26694 | grands | Question (Grader is different from the original contest) (CEOI14_question_grader) | C++11 | 7000 ms | 24556 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <string.h>
void itoa(int num, char *str, int radix){
int i = 0;
int deg = 1;
int cnt = 0;
while (1){ // 자리수의 수를 뽑는다
if ((num / deg) > 0)
cnt++;
else
break;
deg *= radix;
}
deg /= radix; // deg가 기존 자리수보다 한자리 높게 카운트 되어서 한번 나누어줌
// EX) 1241 -> cnt = 4; deg = 1000;
for (i = 0; i<cnt; i++) { // 자리수만큼 순회
*(str + i) = num / deg + '0'; // 가장 큰 자리수의 수부터 뽑음
num -= ((num / deg) * deg); // 뽑은 자리수의 수를 없엠
deg /= radix; // 자리수 줄임
}
*(str + i) = '\0'; // 문자열끝널..
}
//[출처] [C] atoi(), itoa() 구현.. | 작성자 Finger
int encode(int n, int x, int y) {
char N[100] = { 0 }, X[100] = { 0 }, Y[100] = { 0 };
itoa(n, N, 2);
//printf("n %d : %10s\n", n, N);
itoa(x, X, 2);
//printf("x %d : %10s\n", x, X);
itoa(y, Y, 2);
//printf("y %d : %10s\n", y, Y);
//printf("\n");
int i = strlen(N) - 1, j = strlen(X) - 1, k = strlen(Y) - 1;
int ret = 1;
while (true){
if (ret % 2 == 0 && N[i] == X[j] && X[j] != Y[k]){
return ret;
}
if (ret % 2 == 1 && N[i] == Y[k] && X[j] != Y[k]){
return ret;
}
i--;
j--;
k--;
if (i < 0){
N[0] = '0';
i = 0;
}
if (j < 0){
X[0] = '0';
j = 0;
}
if (k < 0){
Y[0] = '0';
k = 0;
}
ret++;
}
}
#include <string.h>
void itoa1(int num, char *str, int radix){
int i = 0;
int deg = 1;
int cnt = 0;
while (1){ // 자리수의 수를 뽑는다
if ((num / deg) > 0)
cnt++;
else
break;
deg *= radix;
}
deg /= radix; // deg가 기존 자리수보다 한자리 높게 카운트 되어서 한번 나누어줌
// EX) 1241 -> cnt = 4; deg = 1000;
for (i = 0; i<cnt; i++) { // 자리수만큼 순회
*(str + i) = num / deg + '0'; // 가장 큰 자리수의 수부터 뽑음
num -= ((num / deg) * deg); // 뽑은 자리수의 수를 없엠
deg /= radix; // 자리수 줄임
}
*(str + i) = '\0'; // 문자열끝널..
}
//[출처] [C] atoi(), itoa() 구현.. | 작성자 Finger
int decode (int n, int q, int h) {
char N[100] = { 0 }, Q[100] = { 0 } ;
itoa1(n, N, 2);
itoa1(q, Q, 2);
int i = strlen(N) - h, j = strlen(Q) - h;
if (h % 2 == 0){
//ret % 2 == 0 && N[i] == X[j] && X[j] != Y[k]
if (i < 0){
N[0] = '0';
i = 0;
}
if (j < 0){
Q[0] = '0';
j = 0;
}
return (N[i] == Q[j]);
}
else{
//ret % 2 == 1 && N[i] == Y[j] && X[j] != Y[k]
if (i < 0){
N[0] = '0';
i = 0;
}
if (j < 0){
Q[0] = '0';
j = 0;
}
return !(N[i] == Q[j]);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |