【CodeForces 730H】Delete Them

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
%s",o);
    else puts("No");
    return 0;
}
原文地址:https://www.cnblogs.com/flipped/p/7202373.html