codeforce round 612

A题题意:

  就是给你一个只包含A和P字母的串,问你A后面最多有几个p。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define long long ll;
 4 char a[200];
 5 int main()
 6 {
 7     int  n,m;
 8     cin>>n;
 9     while(n--)
10     {
11         cin>>m;
12         getchar();
13         scanf("%s",a);
14         int h=strlen(a);
15         int i =0,j;
16         int ans =0;
17         for(i=0;i<h;i++)
18         {
19             if(a[i]=='A')
20             {
21                 int t=0;
22                 for( j=i+1;j<h;j++)
23                 {
24                     if(a[j]=='P')t++;
25                     ans=max(t,ans);
26                     if(a[j]=='A')
27                     {
28                         
29                         break;
30                     }
31                 }
32             }
33         }
34         printf("%d\n",ans);
35     }
36 } 
View Code

B题题意:

  给你n排字符串,每排字符串的长度是m。字符由set三个字母构成。你要拿三排字符串出来且这三排的字符串要么每列都不相同,要么那一列全相等。

思路:其实就是找两排字符串就可以了,因为第三排可以由前面两排构造出来。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string s[1502];
 4 map<string,int>mp;
 5 int main()
 6 {
 7     int n,m;
 8     cin>>n>>m;
 9     int i,j;
10     for(i=0;i<n;i++)
11     {
12         cin>>s[i];
13         mp[s[i]]++;
14     }
15     int ans=0;
16     int t='S'+'E'+'T',r;
17     for(i=0;i<n;i++)
18     {
19         for(j=i+1;j<n;j++)
20         {
21              string p;
22             for(r=0;r<m;r++)
23             {
24                 if(s[i][r]==s[j][r])
25                 {
26                     p+=s[i][r];
27                 }
28                 else p+=t-s[i][r]-s[j][r];
29             }
30             ans+=mp[p];
31         }
32     }
33     printf("%d\n",ans/3);
34 }
View Code

 

posted @ 2020-03-04 21:01  蒟蒻也有大梦想  阅读(93)  评论(0)    收藏  举报