Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include <math.h>
- #include <ctype.h>
- #include <time.h>
- typedef long long ll;
- typedef unsigned long long ull;
- ll max(ll a, ll b) {
- return (a > b) ? a : b;
- }
- ll toll(char c) {
- if(isdigit(c))
- return c - '0';
- return c - 'a' + 10;
- }
- ll upper;
- long double power;
- ull todec(char * str, ll x) {
- ull res = 0;
- ull mul = 1;
- char * end = str;
- while(*end)
- ++end;
- --end;
- mul = 1;
- while(end >= str) {
- if((power - res) / mul < toll(*end)) {
- upper = 1;
- break;
- }
- res += toll(*end) * mul;
- mul *= x;
- --end;
- }
- return res;
- }
- void parse(char * str, char * a, char * b, char * c, char * d) {
- while(*str != '+' && *str != '*')
- *a++ = *str++;
- *a = 0;
- *d = *str;
- ++str;
- while(*str != '=')
- *b++ = *str++;
- *b = 0;
- ++str;
- while(*str)
- *c++ = *str++;
- *c = 0;
- }
- int main()
- {
- power = pow(2, 64);
- char a[1001][100], b[1001][100], c[1001][100], d[1001];
- ll n;
- scanf("%lld", &n);
- long long min_base = -1;
- for(ll i = 0; i < n; i++) {
- char arr[1000];
- scanf("%s", arr);
- parse(arr, a[i], b[i], c[i], &d[i]);
- for(ll j = 0; a[i][j]; ++j)
- min_base = max(min_base, toll(a[i][j]));
- for(ll j = 0; b[i][j]; ++j)
- min_base = max(min_base, toll(b[i][j]));
- for(ll j = 0; c[i][j]; ++j)
- min_base = max(min_base, toll(c[i][j]));
- }
- clock_t time = clock();
- ll first = -1, second = -1;
- upper = 0;
- for(ll i = min_base + 1; i < min_base + 1500 && (clock() - time) / CLOCKS_PER_SEC < 4.0; i++) {
- ll ex = 0;
- for(ll j = 0; j < n; j++) {
- if(d[j] == '+') {
- if(todec(a[j], i) + todec(b[j], i) != todec(c[j], i)) {
- ex = 1;
- break;
- }
- } else {
- if(todec(a[j], i) * todec(b[j], i) != todec(c[j], i)) {
- ex = 1;
- break;
- }
- }
- }
- if(upper)
- break;
- if(!ex) {
- if(first == -1)
- first = i;
- else {
- second = i;
- printf("-1");
- return 0;
- }
- }
- upper = 0;
- }
- if(first == -1)
- printf("0");
- else
- printf("%lld", first);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement