[题解]UVA10700 Camel trading
链接: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的更多相关文章
- UVA10700:Camel trading(栈和队列)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/J 题目大意: 给一个没有加上括号的表达式且只有+ , ...
- UVA 10700 Camel trading 无括号的表达式 贪心
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范 ...
- uva:10700 - Camel trading(贪婪)
题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...
- UVa 10700 - Camel trading
题目大意:给一个不含括号.只有+和*运算的表达式,数字的范围在1到20之间,算出计算结果的可能最大值和最小值. 贪心,如果加法优先级比乘法高,那么得出的结果为最大值.(a+b)*c = a*c + b ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- 一位学长的ACM总结(感触颇深)
发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...
- CodeForces 176A Trading Business 贪心
Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...
- 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 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
随机推荐
- SSM框架——thymeleaf学习总结
本人关于thymeleaf的学习源自: https://www.bilibili.com/video/BV1qy4y117qi 1.thymeleaf的项目搭建 首先创建springboot项目,相关 ...
- Django settings.py配置文件
import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 这里用到了python中一个神奇的变量 file 这个变量可以获取到当前 ...
- 前端基础之javaScript(基本类型-布尔值数组-if-while)
目录 一:javaScript基本数据类型 1.字符串类型常用方法 2.返回长度 3.移出空白 4.移除左边的空白 5.移出右边的空格 6.返回第n个字符 7.子序列位置 8.根据索引获取子序列 9. ...
- linux文件时间详细说明
目录 一:文件时间信息 2 文件时间详细说明 一:文件时间信息 1 文件时间信息分类: 三种时间信息 文件修改时间: mtime 属性修改时间: ctime 文件访问时间: atime 2 查看文件时 ...
- kubernetes之添加删除node
添加node 1.master生成token [root@node-01 ~]# kubeadm token create --print-join-command kubeadm join 172. ...
- list概述
1.list概述 list 是一种双向链表.list 的设计更加复杂一点,好处是每次插入或删除一个元素,就配置或释放一个元素,list 对于空间的运用有绝对的精准,一点也不浪费.而且对于任何位置的元素 ...
- ApacheCN Asp.NET 译文集 20211126 更新
ASP.NET Core2 基础知识 零.前言 一.搭建舞台 二.控制器 三.视图 四.模型 五.验证 六.路由 七.RestBuy 八.添加功能.测试和部署 ASP.NET Core3 和 Angu ...
- HowToDoInJava 其它教程 1 · 翻译完成
原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...
- ansible学习(二)- 清单配置详解
出处:http://www.zsythink.net/archives/2509 上一篇文章介绍了ansible的基本概念,以及相关的基础配置,我们已经知道,如果想要管理受管主机,则需要将受管主机添加 ...
- php截取字符串,避免乱码
转载请注明来源:https://www.cnblogs.com/hookjc/ 1. 截取GB2312中文字符串 <?php//截取中文字符串 function mysubstr($str, $ ...