题目 Hyperset

题意

字符串内只有 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 }
posted @ 2020-01-21 16:07  w_w_t  阅读(170)  评论(0编辑  收藏  举报