Codeforces Problemset 39A
2012-12-22 00:57
375 查看
问题描述
C*++语言和C++语言非常相似,然而C*++的程序有时会出现意想不到的结果。比如像这样的算术表达式:
表达式=基本式 / 表达式+基本式 / 表达式-基本式
基本式=增量 / 系数*增量
增量=a++ / ++a
系数=0/1/2/……/1000
如“5*a++-3*++a+a++”是合法的C*++表达式。
计算这样的表达式的值的方法:首先是每个基本式进行计算,然后按照正常的算术运算法则计算。如果一个基本式包含“a++”,则先进行乘法运算再使变量a权值+1;如果一个基本式包含“++a”,则先使变量a权值+1再进行乘法运算。
然而基本式可以按任意顺序计算,这就是为什么计算结果是完全无法预料的。
你的任务就是去找到最大的可能结果。
第一行,一个整数n,表示变量a的初始值。
第二行,一个合法的C*++表达式。
共一行,一个整数ans,表示最大可能结果。
输入格式
input 1:
1
5*a++-3*++a+a++
input 2:
3
a+++++a
输出格式
output 1:
11
output 2:
8
数据规模和约定
对于20%的数据,表达式长度<=20。
另有20%的数据,满足n>=0。
对于100%的数据,-1000<=n<=1000,表达式长度<=10000。
注意表达式开头可能有负号!
首先,注意一下题面!发现读入是非常好读的(自我吐槽)。
然后拆出来每个单项式的系数和到底是“a++”还是“++a”
然后答案加上系数*最初的a如果是“a++”再减去一个a
这样就等价于a的初值为1了……然后把系数从小到大排序然后搞一下就好了
十分巧妙
C*++语言和C++语言非常相似,然而C*++的程序有时会出现意想不到的结果。比如像这样的算术表达式:
表达式=基本式 / 表达式+基本式 / 表达式-基本式
基本式=增量 / 系数*增量
增量=a++ / ++a
系数=0/1/2/……/1000
如“5*a++-3*++a+a++”是合法的C*++表达式。
计算这样的表达式的值的方法:首先是每个基本式进行计算,然后按照正常的算术运算法则计算。如果一个基本式包含“a++”,则先进行乘法运算再使变量a权值+1;如果一个基本式包含“++a”,则先使变量a权值+1再进行乘法运算。
然而基本式可以按任意顺序计算,这就是为什么计算结果是完全无法预料的。
你的任务就是去找到最大的可能结果。
第一行,一个整数n,表示变量a的初始值。
第二行,一个合法的C*++表达式。
共一行,一个整数ans,表示最大可能结果。
输入格式
input 1:
1
5*a++-3*++a+a++
input 2:
3
a+++++a
输出格式
output 1:
11
output 2:
8
数据规模和约定
对于20%的数据,表达式长度<=20。
另有20%的数据,满足n>=0。
对于100%的数据,-1000<=n<=1000,表达式长度<=10000。
注意表达式开头可能有负号!
首先,注意一下题面!发现读入是非常好读的(自我吐槽)。
然后拆出来每个单项式的系数和到底是“a++”还是“++a”
然后答案加上系数*最初的a如果是“a++”再减去一个a
这样就等价于a的初值为1了……然后把系数从小到大排序然后搞一下就好了
十分巧妙
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; bool flag; int a,n,i,j,k,x,o,ans; int w[10011],tot; char s[100011]; int main() { scanf("%d\n%s",&a,s+1); n=strlen(s+1); if (s[1]!='-') { for (i=n+1;i>1;i--) s[i]=s[i-1]; s[1]='+'; n++; } for (i=1;i<=n;i+=3) { if (s[i++]=='+') k=1; else k=-1; j=0; while (i<=n&&'0'<=s[i]&&s[i]<='9') (j*=10)+=s[i++]-48; if (s[i]=='*') i++; else j=1; w[++tot]=(k*=j); ans+=(a-(s[i]=='a'))*k; } sort(w+1,w+tot+1); for (i=1;i<=tot;i++) ans+=i*w[i]; cout<<ans; return 0; }
相关文章推荐
- Codeforces Problemset 30D(#30 div.1 D)
- Codeforces ProblemSet 19B
- Codeforces Problemset 98D(#78 div.1 D)
- Codeforces Problemset 10E(#10 div.1 E)
- CodeForces Round #202 (Div. 2) / ProblemSet 349B - B. Color the Fence 【贪心】
- Codeforces Problemset 98C(#78 div.1 C)
- Codeforces Problemset 198E(#125 div.1 E)
- Codeforces Problemset 23D(#23 div.1 D)
- Т-prime http://codeforces.com/problemset/problem/230/B
- Codeforces ProblemSet 163E 解题报告
- Codeforces Problemset 30E(#30 div.1 E)
- Codeforces Problemset 212D(VK Cup 2012 Finals (unofficial online-version))
- codeforces.com/problemset/problem/213/C
- 【模拟】NEERC15 E Easy Problemset (Codeforces GYM 100851)
- 【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- dfs搜索练习题 http://codeforces.com/problemset/problem/589/J
- Codeforces Round #296 (Div. 2) —— C(set/multiset)
- codeforces Problem- 630K Indivisibility
- Codeforces Problem 708B Recover the String(implementation&math)
- Codeforces Problem 499B. Lecture