人 傻 常 数 大
查看原帖
人 傻 常 数 大
151647
sycqwq楼主2020/11/1 12:55

rt

第二个点跑了4,5秒

复杂度 O(m3n)O(m^3n)

应该不会炸的啊

人 傻 常 数 大

帮我卡卡常

#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;
}
2020/11/1 12:55
加载中...