【CodeForces 730H】Delete Them

时间:2023-12-13 12:40:26

BUPT 2017 summer training (for 16) #1E

题意

找到匹配要删除的文件名们但不匹配其它文件名们的表达式。其中?匹配所有字符,其它字符匹配本身。

题解

如果某个位置出现两个及以上的不同字符,那就要用?。再看是否会匹配其它文件名。注意长度不同一定不匹配。

代码

#include <cstdio>
char w[101][101];
bool d[101];
char o[101];
int n,m;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%s",w[i]);
for(int i=1,t;i<=m;++i)
scanf("%d",&t),d[t]=true;
bool ans=true;
int len=0;
for(int i=1,j;i<=n;++i)
if(d[i]){
for(j=0;w[i][j];++j)
if(o[j]&&o[j]!=w[i][j])
o[j]='?';
else
o[j]=w[i][j];
if(len==0)len=j;
if(j!=len)ans=false;
}
for(int i=1,j;i<=n&&ans;++i)
if(!d[i]){
bool dif=false;
for(j=0;w[i][j];++j)
if(o[j]!='?'&&w[i][j]!=o[j])
dif=true;
if(!dif&&j==len)ans=false;
}
if(ans)printf("Yes\n%s",o);
else puts("No");
return 0;
}