读懂题意后,发现这是一个贪心,我们只需要找出其中的类似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的功能还是很好用