比赛地址: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 }
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 }