hihocoder-1135-Magic Box

三种颜色的球一次放入盒子,当数量差满足x,y,z时盒子中的球的个数清零,求盒子中出现数量最多的球的个数

数据范围:球的数量<=20000

分析:直接跟踪一遍放入球的过程,判断是否满足x,y,z,并更新答案

注意:在for循环中是当满足条件是更新答案,退出循环后还要更新一遍答案,这是最后一轮的盒子中剩下的球的数量

 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 #include<cmath>
 5 #include<vector>
 6 #include<algorithm>
 7 using namespace std;
 8 
 9 int x,y,z;
10 string s;
11 
12 bool chk(int a,int b,int c)
13 {
14     int u=abs(a-b);
15     int v=abs(a-c);
16     int t=abs(b-c);
17     if(u==x&&v==y&&t==z) return true;
18     if(u==x&&v==z&&t==y) return true;
19     if(u==y&&v==x&&t==z) return true;
20     if(u==y&&v==z&&t==x) return true;
21     if(u==z&&v==x&&t==y) return true;
22     if(u==z&&v==y&&t==x) return true;
23     return false;
24 }
25 
26 int main()
27 {
28     while(cin>>x>>y>>z){
29         cin>>s;
30         int cr=0,cb=0,cy=0;
31         int sum=0;
32         int ans=0;
33         for(int i=0;i<s.size();i++){
34             sum++;
35             if(s[i]=='R') cr++;
36             else if(s[i]=='B') cb++;
37             else cy++;
38             if(chk(cr,cb,cy)){
39                 ans=max(ans,sum);
40                 sum=0;
41                 cr=cb=cy=0;
42             }
43         }
44         ans=max(ans,sum);
45         cout<<ans<<endl;
46     }
47 }

 

posted @ 2016-09-10 15:20  0_summer  阅读(113)  评论(0编辑  收藏  举报