zoukankan      html  css  js  c++  java
  • Codeforces Round #425 (Div. 2)

    题目链接:http://codeforces.com/contest/832/problem/B

    题意:给定一个好字母集合(只有小写字母,除了这些外其余都是坏字母集合),给定一个匹配模式串,

    模式串只包含小写字母,'*','?'; 其中'?'可以替换成“好字母集合”中的任意一个字母 

    ‘*’可以替换成空字符串坏字母组成的字符串

    然后给你n个字符串,问你这n个字符串哪些满足给定的匹配模式。 

    思路:按照题意模拟,或者直接写个正则表达式来匹配即可。

    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<string>
    #include<queue>
    #include<vector>
    #include<time.h>
    #include<cmath>
    using namespace std;
    typedef long long int LL;
    const int MAXN = 1e5 + 24;
    const int INF = 0x3f3f3f3f;
    const int mod = 1e9 + 7;
    char gchar[26], pattern[MAXN], str[MAXN];
    int vis[26];
    int main(){
    #ifdef kirito
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
    #endif
        int n, slen, plen, glen;
        while (~scanf("%s", gchar)){
            scanf("%s", pattern); scanf("%d", &n);
            plen = strlen(pattern);  glen = strlen(gchar);
            bool flag = false;
            for (int i = 0; i < plen; i++){
                if (pattern[i] == '*'){
                    flag = true; break;
                }
            }
            memset(vis, 0, sizeof(vis));
            for (int i = 0; i < glen; i++){
                vis[gchar[i] - 'a'] = 1;
            }
            for (int i = 1, j, k; i <= n; i++){
                scanf("%s", str);
                slen = strlen(str);
                bool res = true;
                if (plen - 1 == slen&&flag){
                    int pos = 0;
                    for (j = 0; j < slen&&res; j++, pos++){
                        if (pattern[pos] == '*'){ //换成空字符串
                            j--;
                        }
                        else if (pattern[pos] == '?'){
                            if (!vis[str[j] - 'a']){
                                res = false;
                            }
                        }
                        else{
                            if (pattern[pos] != str[j]){
                                res = false;
                            }
                        }
                    }
                }
                else if (plen <= slen){
                    int pos = 0, pslen = slen - plen;
                    if (pslen&&!flag){ 
                        res = false; 
                    }
                    for (j = 0; j < slen&&res; j++, pos++){
                        if (pattern[pos] == '*'){ //换成坏字母组成的字符串
                            for (k = j; k <= j + pslen; k++){
                                if (vis[str[k] - 'a']){
                                    res = false; break;
                                }
                            }
                            j = j + pslen;
                        }
                        else if (pattern[pos] == '?'){
                            if (!vis[str[j] - 'a']){
                                res = false;
                            }
                        }
                        else{
                            if (pattern[pos] != str[j]){
                                res = false;
                            }
                        }
                    }
                }
                else{
                    res = false;
                }
                printf(res ? "YES
    " : "NO
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    Django的高级用法
    Django信号和缓存
    初识Django框架
    虚拟化之KVM(上)
    jQuery操作页面-day13
    SSM整合
    新闻发布系统
    jsp
    分层
    简单工厂
  • 原文地址:https://www.cnblogs.com/kirito520/p/7246812.html
Copyright © 2011-2022 走看看