rt
第二个点跑了4,5秒
复杂度 O(m3n)
应该不会炸的啊
人 傻 常 数 大
帮我卡卡常
#include<bits/stdc++.h>
#define read() Read<int>()
namespace pb_ds{
namespace io{
const int MaxBuff=1<<15;
const int Output=1<<23;
char B[MaxBuff],*S=B,*T=B;
#define getc() ((S==T)&&(T=(S=B)+fread(B,1,MaxBuff,stdin),S==T)?0:*S++)
char Out[Output],*iter=Out;
inline void flush(){
fwrite(Out,1,iter-Out,stdout);
iter=Out;
}
}
template<class Type> inline Type Read(){
using namespace io;
register char ch;
register Type ans=0;
register bool neg=0;
while(ch=getc(),(ch<'0' || ch>'9') && ch!='-');
ch=='-'?neg=1:ans=ch-'0';
while(ch=getc(),'0'<= ch && ch<='9') ans=ans*10+ch-'0';
return neg?-ans:ans;
}
template<class Type> inline void Print(register Type x,register char ch='\n'){
using namespace io;
if(!x) *iter++='0';
else{
if(x<0) *iter++='-',x=-x;
static int s[100];
register int t=0;
while(x) s[++t]=x%10,x/=10;
while(t) *iter++='0'+s[t--];
}
*iter++=ch;
}
}
using namespace pb_ds;
using namespace std;
typedef long long ll;
const int maxn=1e3+5;
int n,m;
char a[maxn][maxn],b[maxn][maxn];
//int check(int x,int y,int z)
//{
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// if(b[i][x]==a[j][x]&&b[i][y]==a[j][y]&&b[i][z]==a[j][z])
// return 0;
// }
// return 1;
//}
map<int,int> bk;
int main(){
// freopen("cownomics.in","r",stdin);
// freopen("cownomics.out","w",stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i]+1;
}
for(int i=1;i<=n;i++)
{
cin>>b[i]+1;
}
// for(int i=1;i<=m;i++)
// {
//
// map<int,char> qaq;
// bk[i]=1;
// qaq['A']=0;
// qaq['C']=0;
// qaq['G']=0;
// qaq['T']=0;
// for(int j=1;j<=n;j++)
// {
// qaq[a[j][i]]=1;
// }
// for(int j=1;j<=n;j++)
// {
// if(qaq[b[j][i]]==1)
// {
// bk[i]=0;
// break;
// }
// }
//
// }
int s=0;
for(int i=1;i<=m-2;i++)
{
for(int j=i+1;j<=m-1;j++)
for(int k=j+1;k<=m;k++)
{
bk.clear();
for(int l=1;l<=n;l++)
{
bk[a[l][i]*100+a[l][j]*10+a[l][k]]=1;
}
int f=1;
for(int l=1;l<=n;l++)
{
if(bk[b[l][i]*100+b[l][j]*10+b[l][k]])
{
f=0;
break;
}
}
if(f)
{
++s;
}
}
}
cout<<s;
return 0;
}