首页 > 其他 > 详细

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

时间:2016-10-29 19:43:54      阅读:329      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:http://www.cnblogs.com/wuwangchuxin0924/p/6011471.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!