中国大学生程序设计竞赛(杭州)1006 Four Operations

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中国大学生程序设计竞赛(杭州)1006 Four Operations相关的知识,希望对你有一定的参考价值。

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
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
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;
}

 

以上是关于中国大学生程序设计竞赛(杭州)1006 Four Operations的主要内容,如果未能解决你的问题,请参考以下文章

2016中国大学生程序设计竞赛(ccpc 杭州)题解报告

2016中国大学生程序设计竞赛(ccpc 杭州)题解报告

HDU 5935 Car 模拟 (中国大学生程序设计竞赛(杭州))

(Incomplete) 中国大学生程序设计竞赛(杭州)

HDU 5936 Difference 中途相遇法(中国大学生程序设计竞赛(杭州))

HDU 5934 Bomb 图论缩点(中国大学生程序设计竞赛(杭州))