1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <cstdio> #include <cctype> #include <algorithm> #include <cstring> #include <iostream> #include <cassert> #include <cmath> using namespace std; typedef long long ll; template <typename _Tp> inline void read(_Tp &a, char c = 0, int f = 1) { for(c = getchar(); !isdigit(c); c = getchar()) if(c == '-') f = -1; for(a = 0; isdigit(c); a = a * 10 + c - '0', c = getchar()); a *= f; } template <typename _Tp> inline void write(_Tp a) { if(a < 0) putchar('-'), a = -a; if(a > 9) write(a / 10); putchar(a % 10 + '0'); }
const int N = 21;
int n; char s[N];
inline ll GET(int l, int r, ll ret = 0) { for(int i = l; i <= r; i++) ret = ret * 10 + s[i] - '0'; return ret; }
ll ans;
#ifdef DEBUG ll tmp[6]; void dfs(int cnt, int p) { if(cnt == 5) { auto x = tmp[1] + tmp[2] - tmp[3] * tmp[4] / tmp[5]; ans = max(ans, x); return; } for(int i = p; i <= n; i++) { tmp[cnt + 1] = GET(p, i); dfs(cnt + 1, i + 1); } } #endif
inline ll calc(ll a, ll b, ll c, ll d, ll e) { return a + b - c * d / e; }
int main() { int T; read(T); for(int _T = 1; _T <= T; _T++) { ans = -1e19; scanf("%s", s + 1); n = strlen(s + 1); for(int p = n; p >= 5; p--) { ll t5 = GET(p, n); ll t4 = GET(p - 1, p - 1); ll t3 = GET(p - 2, p - 2); ll t1_1 = GET(1, p - 4); ll t2_1 = GET(p - 3, p - 3); ll t1_2 = GET(1, 1); ll t2_2 = GET(2, p - 3); ll x = max(calc(t1_1, t2_1, t3, t4, t5), calc(t1_2, t2_2, t3, t4, t5)); ans = max(x, ans); } printf("Case #%d: ", _T), write(ans), putchar('\n'); } return 0; }
|