Submission #4880

#TimeUsernameProblemLanguageResultExecution timeMemory
4880aintaOdd-even (IZhO11_oddeven)C++98
100 / 100
0 ms1092 KiB
#pragma warning(disable:4996) #include<stdio.h> char p[110]; int w[150], L; void Do(int *a){ int i; for (i = 0; i < 133; i++){ if (a[i] < 0)a[i] += 10, a[i + 1]--; if (a[i] > 9)a[i + 1] += a[i]/10, a[i] %= 10; } } void plusminus(int *T, int *a, int *b, bool k){ int i; for (i = 0; i <= 130; i++){ if (k)T[i] = a[i] - b[i]; else T[i] = a[i] + b[i]; } Do(T); } void div2(int *a){ int i; for (i = 130; i >= 0; i--){ if (i && (a[i] & 1))a[i - 1] += 10; a[i] >>= 1; } } void mul(int *T, int *a, int *b){ int i, j; for (i = 0; i <= 130; i++)T[i] = 0; for (i = 0; i <= 130; i++){ for (j = 0; i + j <= 130; j++){ T[i + j] += a[i] * b[j]; } } Do(T); } bool Isbigger(int *a, int *b){ int i, t; for (i = 130; i >= 0; i--){ t = a[i] - b[i]; if (!t)continue; if (t > 0)return true; return false; } return true; } int B[150], E[150], T1[150], T2[150], T3[150], M[150], R[150]; void Pro() { int i; B[0] = 1; T2[0] = 1; for (i = 0; i < L / 2 + 1; i++)E[i] = 9; while (Isbigger(E,B)){ plusminus(M, B, E, 0); div2(M); mul(T1, M, M); plusminus(T1, T1, M, 0); div2(T1); if (Isbigger(T1, w)){ for (i = 0; i <= 130; i++)R[i] = M[i]; plusminus(E, M, T2, 1); } else plusminus(B, M, T2, 0); } return; } int main() { int i; scanf("%s", p); for (i = 0; p[i]; i++); L = i; for (i = 0; p[i]; i++)w[L - 1 - i] = p[i] - '0'; Pro(); mul(T1, R, R); mul(T2, R, R); plusminus(T1, T1, R, 0); div2(T1); plusminus(T3, T1, w, 1); for (i = 1; i <= 130; i++)T1[i] = 0; T1[0] = 2; mul(B, T3, T1); plusminus(R, T2, B, 1); for (i = 130;; i--)if (R[i])break; for (i = i; i >= 0; i--)printf("%d", R[i]); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...