B - Little Rabbit's Equation HDU - 6828
阿新 • • 發佈:2020-08-11
https://vjudge.net/contest/387998#problem/B
Little Rabbit is interested in radix. In a positional numeral system, the radix is the number of unique digits, including the digit $0$, used to represent numbers. For example, for the decimal system (the most common system in use today) the radix is ten, because it uses the ten digits from $0$ to $9$. Generally, in a system with radix $b$ ($b > 1$), a string of digits $d_1 \dots d_n$ denotes the number $d_1b^{n-1} + d_2b^{n-2} + \dots + d_nb^0$, where $0 \le d_i < b$.Little Rabbit casually writes down an equation. He wonders which radix this equation fits.
InputThe are several test cases. Each test case contains a string in a line, which represents the equation Little Rabbit writes down. The length of the string is at most $15$. The input is terminated by the end-of-file.
The equation's format: number, operator, number, $=$, number. There's no whitespace in the string.
Each number has at least $1$ digit, which may contain digital numbers $0$ to $9$ or uppercase letters $A$ to $F$ (which represent decimal $10$ to $15$). The number is guaranteed to be a non-negative integer, which means it doesn't contain the radix point or negative sign. But the number may contain leading zeros.
The operator refers to one of $+$, $-$, $*$, or $/$. It is guaranteed that the number after $/$ will not be equal to $0$. Please note that the division here is not integer division, so $7/2=3$ is not correct.OutputFor each test case, output an integer $r$ ($2 \le r \le 16$) in a line, which means the equation is correct in the system with radix $r$. If there are multiple answers, output the minimum one. If there is no answer between $2$ and $16$, output $-1$.Sample Input
1+1=10 18-9=9 AA*AA=70E4 7/2=3
Sample Output
2 10 16 -1
題意:
給一些算式 判斷該算式成立的數的最小進位制
保證都是整除,不是的話輸出-1,長度為15,進製為2~16
思路:
模擬 分字串
字串通過+, -, *把數字分割出來,產生3段
從小到大列舉每種進位制
程式碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> #include<cassert> #include<cctype> #include<cmath> #include<cstdlib> #include<ctime> #include<deque> #include<iomanip> #include<list> #include<map> #include<queue> #include<set> #include<stack> #include<vector> #include <vector> #include <iterator> #include <utility> #include <sstream> #include <limits> #include <numeric> #include <functional> using namespace std; #define gc getchar() #define mem(a) memset(a,0,sizeof(a)) #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int,int> pii; typedef char ch; typedef double db; const double PI=acos(-1.0); const double eps=1e-6; const int inf=0x3f3f3f3f; const int maxn=1e5+10; const int maxm=100+10; const int N=1e6+10; const int mod=1e9+7; int Atoi(string s,int radix) { int ans = 0; for(int i = 0;i<s.size();i++) { char t = s[i]; if(t >= '0' && t <= '9') { if(t - '0' >= radix) return -1; ans = ans * radix + 1ll * (t -'0'); } else { if(1ll * (t - 'A' + 10) >= radix) return -1; ans = ans * radix + 1ll * (t - 'A' + 10); } } return ans; } signed main() { string s; while(cin >> s) { int opt = -1; int eq = -1; for(int i = 0; i < s.size(); i++) { if(s[i] >= '0' && s[i] <= '9' || s[i] >= 'A' && s[i] <= 'Z') { continue; } if(opt == -1) { opt = i; } else { eq = i; } } string A = s.substr(0, opt); string B = s.substr(opt + 1, eq - opt - 1); string C = s.substr(eq + 1); bool flag = 0; for(int i = 2; i <= 16; i++) { int a = Atoi(A, i), b = Atoi(B, i), c= Atoi(C, i); if(a == -1 || b == -1 || c == -1) { continue; } bool S = 0; if(opt == '+') { S = a + b == c; } else if(s[opt] == '-') { S = a - b == c; } else if(s[opt] == '*') { S = a * b == c; } else { if(b == 0) return -1; S = a % b == 0 && a == b * c; } if(S) { cout << i << endl; flag = 1; break; } } if(!flag) { cout << -1 << endl; } } }