链接:http://vjudge.net/problem/viewProblem.action?id=21358

描述:给出一个算式,算式里面有加法和乘法,可以任意添加括号从而改变计算顺序。求可能得到的最大结果和最小结果。

思路:贪心

求最大结果:尽量让乘数最大,所以先把所有加法做完,然后再做乘法。

求最小结果:尽量让乘数最小,所以就优先做乘法,这样乘数就只是'*'相邻的两个数。

我的实现(高精度版):

  1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5 #define MaxLen 100
6 #define hp_Len 100
7 typedef int hp[hp_Len];
8 char str[MaxLen];
9 int n,Len;
10 hp ans_Max,ans_Min;
11 void hp_Add(hp a,hp b,hp &ans)
12 {
13 hp c;
14 int i,len=max(a[0],b[0])+3;
15 memset(c,0,sizeof(c));
16 if(a[0]>=b[0])
17 {
18 for(i=1;i<=b[0];++i)
19 {
20 c[i]+=a[i]+b[i];
21 c[i+1]+=c[i]/10;
22 c[i]%=10;
23 }
24 for(;i<=a[0];++i)
25 {
26 c[i]+=a[i];
27 c[i+1]+=c[i]/10;
28 c[i]%=10;
29 }
30 }
31 else
32 {
33 for(i=1;i<=a[0];++i)
34 {
35 c[i]+=a[i]+b[i];
36 c[i+1]+=c[i]/10;
37 c[i]%=10;
38 }
39 for(;i<=b[0];++i)
40 {
41 c[i]+=b[i];
42 c[i+1]+=c[i]/10;
43 c[i]%=10;
44 }
45 }
46 while(len>1&&c[len]==0)
47 len--;
48 c[0]=len;
49 memcpy(ans,c,sizeof(c));
50 }
51 void hp_Mul(hp a,hp b,hp &ans)
52 {
53 hp c;
54 int i,j,len=a[0]+b[0]+5;
55 memset(c,0,sizeof(c));
56 for(i=1;i<=a[0];++i)
57 for(j=1;j<=b[0];++j)
58 c[i+j-1]+=(a[i]*b[j]);
59 for(i=1;i<=len;++i)
60 {
61 c[i+1]+=c[i]/10;
62 c[i]%=10;
63 }
64 while(len>1&&c[len]==0)
65 len--;
66 c[0]=len;
67 memcpy(ans,c,sizeof(c));
68 }
69 inline void Put_in_hp(hp &ans,int a)
70 {
71 hp c;
72 memset(c,0,sizeof(c));
73 while(a)
74 {
75 c[0]++;
76 c[c[0]]=a%10;
77 a/=10;
78 }
79 memcpy(ans,c,sizeof(c));
80 }
81 void Get_Max()
82 {
83 Len+=2;
84 str[Len-2]='*';str[Len-1]='1';
85 int i,tmp=0;
86 hp Pre,Cur;
87 Pre[0]=1;Pre[1]=0;//Pre=0;
88 ans_Max[0]=1;ans_Max[1]=1;//ans_Max=1;
89 for(i=0;i<Len;++i)
90 {
91 if('0'<=str[i]&&str[i]<='9')
92 {
93 tmp=tmp*10+str[i]-'0';
94 continue;
95 }
96 Put_in_hp(Cur,tmp);
97 hp_Add(Pre,Cur,Pre);//Pre+=Cur;
98 if(str[i]=='*')
99 {
100 hp_Mul(ans_Max,Pre,ans_Max);//ans_Max*=Pre;
101 Pre[0]=1;Pre[1]=0;//Pre=0;
102 }
103 tmp=0;
104 }
105 }
106 void Get_Min()
107 {
108 str[Len-2]='+';str[Len-1]='0';
109 int i,tmp=0;
110 hp Pre,Cur;
111 Pre[0]=1;Pre[1]=1;//Pre=1;
112 ans_Min[0]=1;ans_Min[1]=0;//ans_Min=0;
113 for(i=0;i<Len;++i)
114 {
115 if('0'<=str[i]&&str[i]<='9')
116 {
117 tmp=tmp*10+str[i]-'0';
118 continue;
119 }
120 Put_in_hp(Cur,tmp);
121 hp_Mul(Pre,Cur,Pre);//Pre*=Cur;
122 if(str[i]=='+')
123 {
124 hp_Add(ans_Min,Pre,ans_Min);//ans_Min+=Pre;
125 Pre[0]=1;Pre[1]=1;//Pre=1;
126 }
127 tmp=0;
128 }
129 }
130 void hp_Print(hp c)
131 {
132 int i;
133 for(i=c[0];i>=1;--i)
134 printf("%d",c[i]);
135 }
136 inline void Print()
137 {
138 printf("The maximum and minimum are ");
139 hp_Print(ans_Max);
140 printf(" and ");
141 hp_Print(ans_Min);
142 printf(".\n");
143 }
144 int main()
145 {
146 scanf("%d",&n);
147 for(int i=1;i<=n;++i)
148 {
149 scanf("%s",str);
150 Len=strlen(str);
151 Get_Max();
152 Get_Min();
153 Print();
154 }
155 return 0;
156 }

实现二(long long版,之前因为%I64d的原因WA了,改成%lld就AC了):

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5 #define MaxLen 100
6 char str[MaxLen];
7 typedef long long llt;
8 llt n,Len,ans_Max,ans_Min;
9 void Get_Max()
10 {
11 Len+=2;
12 str[Len-2]='*';str[Len-1]='1';
13 llt i;
14 llt Pre=0,Cur=0;
15 ans_Max=1;
16 for(i=0;i<Len;++i)
17 {
18 if('0'<=str[i]&&str[i]<='9')
19 {
20 Cur=Cur*10+str[i]-'0';
21 continue;
22 }
23 Pre+=Cur;
24 if(str[i]=='*')
25 {
26 ans_Max*=Pre;
27 Pre=0;
28 }
29 Cur=0;
30 }
31 }
32 void Get_Min()
33 {
34 str[Len-2]='+';str[Len-1]='0';
35 llt i;
36 llt Pre=1,Cur=0;
37 ans_Min=0;
38 for(i=0;i<Len;++i)
39 {
40 if('0'<=str[i]&&str[i]<='9')
41 {
42 Cur=Cur*10+str[i]-'0';
43 continue;
44 }
45 Pre*=Cur;
46 if(str[i]=='+')
47 {
48 ans_Min+=Pre;
49 Pre=1;
50 }
51 Cur=0;
52 }
53 }
54 int main()
55 {
56 scanf("%I64d",&n);
57 for(int i=1;i<=n;++i)
58 {
59 scanf("%s",str);
60 Len=strlen(str);
61 Get_Max();
62 Get_Min();
63 printf("The maximum and minimum are %I64d and %I64d.\n",ans_Max,ans_Min);
64 }
65 return 0;
66 }

[题解]UVA10700 Camel trading的更多相关文章

  1. UVA10700:Camel trading(栈和队列)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/J 题目大意: 给一个没有加上括号的表达式且只有+ , ...

  2. UVA 10700 Camel trading 无括号的表达式 贪心

    题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范 ...

  3. uva:10700 - Camel trading(贪婪)

    题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...

  4. UVa 10700 - Camel trading

    题目大意:给一个不含括号.只有+和*运算的表达式,数字的范围在1到20之间,算出计算结果的可能最大值和最小值. 贪心,如果加法优先级比乘法高,那么得出的结果为最大值.(a+b)*c = a*c + b ...

  5. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  6. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  7. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  8. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem L. Stock Trading Robot 水题

    Problem L. Stock Trading Robot 题目连接: http://www.codeforces.com/gym/100253 Description CyberTrader is ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

随机推荐

  1. SSM框架——thymeleaf学习总结

    本人关于thymeleaf的学习源自: https://www.bilibili.com/video/BV1qy4y117qi 1.thymeleaf的项目搭建 首先创建springboot项目,相关 ...

  2. Django settings.py配置文件

    import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 这里用到了python中一个神奇的变量 file 这个变量可以获取到当前 ...

  3. 前端基础之javaScript(基本类型-布尔值数组-if-while)

    目录 一:javaScript基本数据类型 1.字符串类型常用方法 2.返回长度 3.移出空白 4.移除左边的空白 5.移出右边的空格 6.返回第n个字符 7.子序列位置 8.根据索引获取子序列 9. ...

  4. linux文件时间详细说明

    目录 一:文件时间信息 2 文件时间详细说明 一:文件时间信息 1 文件时间信息分类: 三种时间信息 文件修改时间: mtime 属性修改时间: ctime 文件访问时间: atime 2 查看文件时 ...

  5. kubernetes之添加删除node

    添加node 1.master生成token [root@node-01 ~]# kubeadm token create --print-join-command kubeadm join 172. ...

  6. list概述

    1.list概述 list 是一种双向链表.list 的设计更加复杂一点,好处是每次插入或删除一个元素,就配置或释放一个元素,list 对于空间的运用有绝对的精准,一点也不浪费.而且对于任何位置的元素 ...

  7. ApacheCN Asp.NET 译文集 20211126 更新

    ASP.NET Core2 基础知识 零.前言 一.搭建舞台 二.控制器 三.视图 四.模型 五.验证 六.路由 七.RestBuy 八.添加功能.测试和部署 ASP.NET Core3 和 Angu ...

  8. HowToDoInJava 其它教程 1 &#183; 翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...

  9. ansible学习(二)- 清单配置详解

    出处:http://www.zsythink.net/archives/2509 上一篇文章介绍了ansible的基本概念,以及相关的基础配置,我们已经知道,如果想要管理受管主机,则需要将受管主机添加 ...

  10. php截取字符串,避免乱码

    转载请注明来源:https://www.cnblogs.com/hookjc/ 1. 截取GB2312中文字符串 <?php//截取中文字符串 function mysubstr($str, $ ...