zoukankan      html  css  js  c++  java
  • UVA 12604

    UVA 12604 - Caesar Cipher

    题意:给一个字母表s,一个标准串w,一个密文s,问w是否可能在密文的原文中出现且仅出现一次

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 6e5;
    char a[maxn], b[maxn], o[maxn];
    int c[300];
    int pi[maxn], f[maxn];
    
    void getnext(int n) {
        pi[1] = 0;
        for (int i = 2, j = 0; i <= n; i++) {
            while (j > 0 && a[i] != a[j + 1]) j = pi[j];
            if (a[i] == a[j + 1]) j++;
            pi[i] = j;
        }
    }
    
    bool solve(int n, int m) {
        int flag = 0;
        for (int i = 1, j = 0; i <= m; i++) {
            while (j > 0 && (j == n || b[i] != a[j + 1])) j = pi[j];
            if (b[i] == a[j + 1]) j++;
            f[i] = j;
            if (f[i] == n) {
                flag++;
            }
        }
        return flag == 1;
    }
    
    vector<int> ans;
    
    int main() {
    //    freopen("in.txt", "r", stdin);
    //    freopen("out.txt", "w", stdout);
        int _;
        scanf("%d", &_);
        char s[100];
        while (_--) {
            ans.clear();
            memset(c, 0, sizeof(c));
            scanf("%s %s %s", s, o + 1, b + 1);
            int na = strlen(o + 1), nt = strlen(b + 1);
            int ns = strlen(s);
            for (int i = 0; i < ns; i++) {
                c[s[i]] = i;
            }
            int cnt = 0;
            for (int k = 0; k < ns; k++) {
                for (int i = 1; i <= na; i++) {
                    a[i] = s[(c[o[i]] + k) % ns];
                }
                a[na + 1] = '';
                getnext(na);
                if (solve(na, nt))
                    ans.push_back(k), cnt++;
            }
            if (cnt == 0) printf("no solution
    ");
            else if (cnt == 1) printf("unique: %d
    ", ans[0]);
            else {
                printf("ambiguous:");
                for (auto v:ans) {
                    printf(" %d", v);
                }
                printf("
    ");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    mvn clean deploy
    数据库分库分表,读写分离
    耳鸣治疗法
    Navicat Preminum
    spring boot 获取bean
    java中集合Collection转list对象
    Java8新特性之Collectors
    spring 给一个类 生成test
    Spring注解标签详解@Autowired @Qualifier等 @Slf4j
    linux定时执行脚本
  • 原文地址:https://www.cnblogs.com/albert-biu/p/11307312.html
Copyright © 2011-2022 走看看