Four Operations
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1315 Accepted Submission(s): 397
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.
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
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
题意:给一个只含'1'~'9'的字符串,要求按顺序插入'+','-','*','/',求运算结果中的最大值
解题思路:要求运行结果最大,设为a+b-c*d/e很明显要让前面a+b尽量大即a<10或b<10以及cde的时候e要尽量大c*d尽量小即c<10和d<10,那么只需要枚举-号的位置就能确定运算答案
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;
#define LL long long
const int INF=0x3f3f3f3f;
int n;
char ch[100];
LL x[25][25];
LL get(int x, int y)
{
LL ans = 0;
for(int i = x; i <= y; i++) ans = ans*10+ch[i]-'0';
return ans;
}
int main()
{
int t,cas=0;
scanf("%d",&t);
while(t--)
{
printf("Case #%d: ", ++cas);
scanf("%s", ch);
int len = strlen(ch);
for(int i = 0; i < len; i++)
for(int j = i; j < len; j++)
x[i][j] = get(i, j);
LL ans = -INF;
for(int i = 0; i < len - 4; i++)
{
for(int j = i+1; j < len - 3; j++)
{
LL a = x[0][i];
LL b = x[i+1][j];
LL c = x[j+1][j+1];
LL d = x[j+2][j+2];
LL e = x[j+3][len-1];
ans=max(ans,a+b-c*d/e);
}
}
printf("%lld\n", ans);
}
return 0;
}