Run Time: 0.109
Ranking (as of 2016-02-24): 6 out of 245
Language: C++
/* UVa 12414 - Calculating Yuan Fen To build using Visual Studio 2012: cl -EHsc -O2 UVa_12414_Calculating_Yuan_Fen.cpp */ #include <cstdio> #include <cstring> #include <algorithm> #ifdef __ELAPSED_TIME__ #include <ctime> #endif using namespace std; const int nr_letters_max = 10, st_max = 10000, nr_chars_max = 127; char previous[nr_chars_max + 1], current[nr_chars_max + 1]; int main() { #ifdef __ELAPSED_TIME__ clock_t start = clock(); #endif char s[nr_letters_max + 1]; while (scanf("%s", s) != EOF) { int st, n, length = strlen(s); bool found = false; for (st = 1; st <= st_max; st++) { char* p = &previous[nr_chars_max]; for (int i = length - 1; i >= 0; i--) { n = st + s[i] - 'A'; do { *--p = '0' + n % 10; n /= 10; } while (n); } #ifdef DEBUG printf("%s\n", p); #endif char *ps = p, *cs = current, *pp, *cp; while (true) { for (pp = ps + 1, cp = cs; *pp; *pp++, *cp++) *cp = (*(pp - 1) - '0' + *pp - '0') % 10 + '0'; *cp = '\0'; #ifdef DEBUG printf("%s\n", cs); #endif if (cp - cs == 3 && cs[0] == '1' && cs[1] == '0' && cs[2] == '0') { found = true; break; } else if (cp - cs < 3) break; swap(ps, cs); } if (found) break; } if (found) printf("%d\n", st); else puts(":("); } #ifdef __ELAPSED_TIME__ fprintf(stderr, "elapsed time = %lf sec.\n", static_cast<double>(clock() - start) / CLOCKS_PER_SEC); #endif return 0; }
No comments:
Post a Comment