题意
字符串内只有 S,E,T三种字符
对于三个字符串的每一位,如果同一位字符要么都相同,要么都不同,则为一组满足条件的字符串
问:对于n个字符串,有多少组满足条件。
输入
第一行输入n , k;接下来n行输入n个字符串
输出
输出满足条件的组数
题解:暴力+二分
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int MA=1e5+5; 5 string str[MA]; 6 7 int main(){ 8 int n,k; 9 cin>>n>>k; 10 for(int i=0;i<n;i++){ 11 cin>>str[i]; 12 } 13 sort(str,str+n); 14 int sum=0; 15 for(int i=0;i<n;i++){ 16 for(int j=i+1;j<n;j++){ 17 string s=""; 18 for(int t=0;t<k;t++){ 19 if(str[i][t]==str[j][t])s+=str[i][t]; 20 else{ 21 if(str[i][t]!='S'&&str[j][t]!='S')s+='S'; 22 else if(str[i][t]!='T'&&str[j][t]!='T')s+='T'; 23 else if(str[i][t]!='E'&&str[j][t]!='E')s+='E'; 24 } 25 } 26 int l=0,r=n-1; 27 while(l<r){ 28 int mid=(l+r)/2; 29 if(str[mid].compare(s)>=0)r=mid; 30 else l=mid+1; 31 } 32 if(str[l].compare(s)==0){ 33 sum++; 34 } 35 } 36 } 37 cout<<sum/3<<endl; 38 return 0; 39 }