QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#333936#5066. String-dle CountC1942huangjiaxuWA 1ms5908kbC++141.6kb2024-02-20 20:23:112024-02-20 20:23:12

Judging History

你现在查看的是最新测评结果

  • [2024-02-20 20:23:12]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5908kb
  • [2024-02-20 20:23:11]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int P=1e9+7;
int n,m,ct[26],ac[26],c[26],f[1<<19],pc[1<<19];
bool ban[19][26],bn[26],lim[26];
char s[19],t[19];
vector<int>va;
inline void Add(int &x,int y){
	if((x+=y)>=P)x-=P;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<26;++i)ct[i]=0;
	for(int i=0;i<m;++i)ac[i]=-1;
	for(int i=1;i<=n;++i){
		scanf("%s%s",s,t);
		memset(c,0,sizeof(c));
		memset(bn,false,sizeof(bn));
		for(int j=0;j<m;++j){
			int u=s[j]-'A';
			if(t[j]=='O'){
				if(~ac[j]&&ac[j]!=u)return puts("0"),0;
				ac[j]=u,++c[u];
				continue;
			}
			ban[j][u]=true;
			if(t[j]=='-'){
				if(bn[u])return puts("0"),0;
				++c[u];
			}else bn[u]=true;
		}
		for(int j=0;j<26;++j){
			if(bn[j]&&(c[j]<ct[j]||lim[j]&&c[j]!=ct[j]))return puts("0"),0;
			if(bn[j])lim[j]=true,ct[j]=c[j];
			else ct[j]=max(ct[j],c[j]);
		}
	}
	for(int i=0;i<26;++i)if(~ac[i]&&ban[i][ac[i]])return puts("0"),0;
	for(int i=0;i<26;++i)for(int j=1;j<=ct[i];++j)va.push_back(i);
	if(va.size()>m)return puts("0"),0;
	while(va.size()<m)va.push_back(26);
	for(int i=1;i<1<<m;++i)pc[i]=pc[i>>1]+(i&1);
	f[0]=1;
	for(int S=0;S<(1<<m)-1;++S)if(f[S]){
		int u=pc[S];
		memset(bn,false,sizeof(bn));
		for(int i=0;i<m;++i)if(va[i]!=26&&!(S>>i&1))bn[va[i]]=true;
		for(int i=0;i<m;++i)if(!(S>>i&1)){
			if(i&&va[i]==va[i-1]&&!(S>>i-1&1))continue;
			if(va[i]==26){
				if(ac[u]!=-1)continue;
				for(int j=0;j<26;++j)if(!lim[j]&&!bn[j]&&!ban[u][j])Add(f[S|1<<i],f[S]);
			}else if(!ban[u][va[i]]&&(ac[u]==-1||ac[u]==va[i]))Add(f[S|1<<i],f[S]);
		}
	}
	printf("%d\n",f[(1<<m)-1]);
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 5908kb

input:

2 5
CRANE
xx--x
NASAL
OOxOO

output:

20

result:

wrong answer 1st numbers differ - expected: '21', found: '20'