HDU5938-Four Operations

来源:互联网 发布:linux 机器重启时间 编辑:程序博客网 时间:2024/06/16 01:48

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.
 

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
1T105
5length of string20
 

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
112345
 

Sample Output
Case #1: 1
 

Source
2016年中国大学生程序设计竞赛(杭州)
 




题意:给一个只含'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 longconst 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;}

原创粉丝点击