Four Operations
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 38 Accepted Submission(s): 18
Problem Description
Little Ruins is a studious boy, recently he learned the four operations!
Now he want to use four operations to generate a number, he takes a string which only contains digits ‘1‘ - ‘9‘, and split it into 5
intervals and add the four operations ‘+‘, ‘-‘, ‘*‘ and ‘/‘ in order, then calculate the result(/ used as integer division).
Now please help him to get the largest result.
Input
First line contains an integer T
, which indicates the number of test cases.
Every test contains one line with a string only contains digits ‘1‘-‘9‘.
Limits
1≤T≤105
5≤length of string≤20
Output
For every test case, you should output ‘Case #x: y‘, where x indicates the case number and counts from 1 and y is the result.
Sample Input
1
12345
Sample Output
Case #1: 1
Source
Recommend
liuyiding
/* 枚举减号,刚开始天真的以为,除数最多是两位......卡死。 */ #include<bits/stdc++.h> #define ll long long #define INF 0x3fffffffffffffff #define N 22 using namespace std; string op; ll right(string s) { ll e=0; int n=s.size(); for(int i=2;i<n;i++) e=e*10+s[i]-‘0‘; //cout<<c<<" "<<d<<" "<<e<<endl; ll ans=(s[0]-‘0‘)*(s[1]-‘0‘)/e; return ans; } ll left(string s)//减号左边的部分 { ll cur1=0,cur2=0; int n=s.size(); for(int i=1;i<n;i++) cur1=cur1*10+(s[i]-‘0‘); cur1+=s[0]-‘0‘; for(int i=0;i<n-1;i++) cur2=cur2*10+(s[i]-‘0‘); cur2+=s[n-1]-‘0‘; //cout<<"max(cur1,cur2)="<<max(cur1,cur2)<<" "; return max(cur1,cur2); } ll solve(string s) { ///枚举减号 ll cur=-INF,s1,s2; int n=s.size(); for(int i=2;i<=n-3;i++) { s1=left(s.substr(0,i)); s2=right(s.substr(i,n-i)); //cout<<s1<<" "<<s2<<endl; cur=max(cur,s1-s2); } printf("%lld\n",cur); } int t; int main() { //freopen("C:\\Users\\acer\\Desktop\\in.txt","r",stdin); scanf("%d",&t); for(int Case=1;Case<=t;Case++) { printf("Case #%d: ",Case); cin>>op; solve(op); } return 0; }