UVA 12902 Reverse Polish Notation

//跟wyr学的
//其实是贪心
//题解稍后补上
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<stack>
11 #include<string>
12 #define LL long long
13 
14 const int MAXN=0;
15 const int MAXM=0;
16 const int INF=2000000000;
17 
18 using namespace std;
19 
20 int T;
21 char s[100007];
22 
23 int solve(){
24     int len=strlen(s);
25     int MIN=INF;
26     int now=0;
27     int flag=0;
28     for (int i=0;i<len;i++){
29             if (s[i]=='a')
30                 now++;
31             else
32                 now--;
33             if (now==MIN) flag=0;
34             if (now<MIN){
35                     MIN=now;
36                     flag=1;
37             }
38     }
39     if (MIN>=1) return now-1;
40     if (MIN==now) return 1+abs(now);
41     return 1+now-MIN*2-flag;
42 }
43 
44 int main(){
45     scanf("%d",&T);
46     for (int cas=1;cas<=T;cas++){
47             scanf("%s",s);
48             int ans=solve();
49             if (s[0]=='+' && s[1]=='a' && s[2]=='a'){
50                     s[0]='a';
51                     s[1]='a';
52                     s[2]='+';
53                     ans=min(ans,solve()+2);
54             }
55             printf("Case %d: %d\n",cas,ans);
56     }
57     return 0;
58 }
59 /*
60 4
61 a
62 a+a
63 +aa
64 aa++++a
65 */
View Code

 

转载于:https://www.cnblogs.com/baby-mouse/p/4661023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值