Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.58 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <math.h>
  5. #include <ctype.h>
  6. #include <time.h>
  7.  
  8. typedef long long ll;
  9. typedef unsigned long long ull;
  10.  
  11. ll max(ll a, ll b) {
  12.     return (a > b) ? a : b;
  13. }
  14.  
  15. ll toll(char c) {
  16.     if(isdigit(c))
  17.         return c - '0';
  18.     return c - 'a' + 10;
  19. }
  20.  
  21. ll upper;
  22.  
  23. long double power;
  24.  
  25. ull todec(char * str, ll x) {
  26.     ull res = 0;
  27.     ull mul = 1;
  28.  
  29.     char * end = str;
  30.     while(*end)
  31.         ++end;
  32.     --end;
  33.  
  34.     mul = 1;
  35.     while(end >= str) {
  36.         if((power - res) / mul < toll(*end)) {
  37.             upper = 1;
  38.             break;
  39.         }
  40.         res += toll(*end) * mul;
  41.         mul *= x;
  42.         --end;
  43.     }
  44.  
  45.     return res;
  46. }
  47.  
  48. void parse(char * str, char * a, char * b, char * c, char * d) {
  49.     while(*str != '+' && *str != '*')
  50.         *a++ = *str++;
  51.     *a = 0;
  52.     *d = *str;
  53.     ++str;
  54.     while(*str != '=')
  55.         *b++ = *str++;
  56.     *b = 0;
  57.     ++str;
  58.     while(*str)
  59.         *c++ = *str++;
  60.     *c = 0;
  61. }
  62.  
  63. int main()
  64. {
  65.     power = pow(2, 64);
  66.  
  67.     char a[1001][100], b[1001][100], c[1001][100], d[1001];
  68.     ll n;
  69.     scanf("%lld", &n);
  70.  
  71.     long long min_base = -1;
  72.     for(ll i = 0; i < n; i++) {
  73.         char arr[1000];
  74.         scanf("%s", arr);
  75.         parse(arr, a[i], b[i], c[i], &d[i]);
  76.         for(ll j = 0; a[i][j]; ++j)
  77.             min_base = max(min_base, toll(a[i][j]));
  78.         for(ll j = 0; b[i][j]; ++j)
  79.             min_base = max(min_base, toll(b[i][j]));
  80.         for(ll j = 0; c[i][j]; ++j)
  81.             min_base = max(min_base, toll(c[i][j]));
  82.     }
  83.  
  84.     clock_t time = clock();
  85.  
  86.     ll first = -1, second = -1;
  87.     upper = 0;
  88.     for(ll i = min_base + 1; i < min_base + 1500 && (clock() - time) / CLOCKS_PER_SEC < 4.0; i++) {
  89.         ll ex = 0;
  90.         for(ll j = 0; j < n; j++) {
  91.             if(d[j] == '+') {
  92.                 if(todec(a[j], i) + todec(b[j], i) != todec(c[j], i)) {
  93.                     ex = 1;
  94.                     break;
  95.                 }
  96.             } else {
  97.                 if(todec(a[j], i) * todec(b[j], i) != todec(c[j], i)) {
  98.                     ex = 1;
  99.                     break;
  100.                 }
  101.             }
  102.         }
  103.         if(upper)
  104.             break;
  105.  
  106.         if(!ex) {
  107.             if(first == -1)
  108.                 first = i;
  109.             else {
  110.                 second = i;
  111.                 printf("-1");
  112.                 return 0;
  113.             }
  114.         }
  115.         upper = 0;
  116.     }
  117.     if(first == -1)
  118.         printf("0");
  119.     else
  120.         printf("%lld", first);
  121.  
  122.     return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement