牛客寒假算法基础训练营6 I题(贪心+栈)

  读懂题意后,发现这是一个贪心,我们只需要找出其中的类似11 00 的序列,把它们删去,剩下的一定是01交错的序列,因为是贪心,我们最差也是得5分,而且这5分可以直接算。

1 /*========================================*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<string>
 5 #include<cstring>
 6 #include<map>
 7 #include<set>
 8 #include<stack>
 9 #include<queue>
10 #include<deque>
11 //priority_queue
12 #include<list>
13 #include<cstdio>
14 #include<cmath>
15 #include<cstring>
16 #include<cctype>
17 #include<cstdlib>
18 #include<ctime>
19 #include<complex>//.real.imag
20 #define rep(i,a) for(int i=0;i<a;++i)
21 #define repd(i,a) for(int i=1;i<=a;++i)
22 #define pii pair<int,int>
23 #define pll pair<long long,long long>
24 #define pdd pair<double,double>
25 #define rbf(elem,a) for(auto elem:a)
26 #define MAXI INT_MAX
27 #define MINI INT_MIN
28 typedef long long ll;
29 const int INF = 0x3f3f3f3f;
30 bool isprime(ll num){if(num==1)return 0;if(num==2||num==3)return 1;if(num%6!=1&&num%6!=5)return 0;ll t=sqrt(num);for(ll i=5;i<=t;i+=6){if(num%i==0||num%(i+2)==0)return 0;}return 1;}
31 using namespace std;
32 /*========================================*/
33 //start your show!
34 int main()
35 {
36     string s,a;//s是题目给与的串串,a是保存01串的单调栈
37     cin>>s;
38     rbf(elem,s)//因为是stl,所以用了range-based for
39     {
40         if(a.empty()||a.back()!=elem)//当a是空串或a最末的值与elem不等时,
41             a.push_back(elem);//压入elem
42         else
43             a.pop_back();//如果相等,则表明可构成一个相等的对,此时弹出先前压入的那一半
44     }
45     cout<<5*(s.size()-a.size()/2)<<endl;//此处就很明了了。
46     return 0;
47 }
48 /*========================================*/
49 //thank for your use.

STL的功能还是很好用

猜你喜欢

转载自www.cnblogs.com/cloudplankroader/p/10348964.html