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 }
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 }

浙公网安备 33010602011771号