喵哈哈村的魔法考试 Round #1 (Div.2)

比赛地址:http://qscoj.cn/contest/2/

都是中文题,这里不在详述题意

A.喵哈哈村的魔法石

分析:暴力求解

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 int main()
 7 {
 8     int a,b,c;
 9     int T;
10     cin>>T;
11     while(T--)
12     {
13         cin>>a>>b>>c;
14         int flag=0;
15         for(int i=0;i<=c/a;i++){
16             for(int j=0;j<=(c-a*i)/b;j++){
17                 if(a*i+b*j==c){
18                     flag=1; break;
19                 }
20             }
21             if(flag)  break;
22         }
23         if(flag)
24             cout<<"Yes"<<endl;
25         else
26             cout<<"No"<<endl;
27     }
28     return 0;
29 }
View Code

B.喵哈哈村的括号序列

分析:找出能进行括号匹配的最大序列的长度。我们可以用一个栈来进行模拟,首先让'('入栈,并对能够进行匹配的两个位置标记为1,最后统计序列中最长的连续1的长度即是所求。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 #include<stack>
 7 using namespace std;
 8 const int maxn=100000+10;
 9 int vis[maxn];
10 int T;
11 int main()
12 {
13     cin>>T;
14     while(T--)
15     {
16         string s;
17         cin>>s;
18         memset(vis,0,sizeof(vis));
19         stack<int>que;
20         while(!que.empty())  que.pop();
21         int len=s.length();
22         for(int i=0;i<len;i++){
23             if(s[i]=='('){
24                 que.push(i);
25             }else{
26                 if(!que.empty()){
27                     vis[i]=1;
28                     vis[que.top()]=1;
29                     que.pop();
30                 }
31             }
32         }
33         int num=0,res=0;
34         for(int i=0;i<len;i++){
35             if(vis[i])
36                 num++;
37             else
38                 num=0;
39             res=max(res,num);
40         }
41         cout<<res<<endl;
42     }
43 }
View Code

 

posted @ 2017-02-21 20:51  wolf940509  阅读(263)  评论(0编辑  收藏  举报