• 69-67: 模拟赛


    模拟,注意知25推1的情况

    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    
    const int MaxN = 1005;
    
    char m[128];
    bool used_a[128], used_b[128];
    char a[MaxN], b[MaxN], c[MaxN], d[MaxN];
    
    char find_unused(bool *u) {
        for (char c = 'a'; c <= 'z'; ++c) {
            if (!u[c]) return c;
        }
        return -1;
    }
    int count_unused(bool *u) {
        int cnt = 0;
        for (char c = 'a'; c <= 'z'; ++c) {
            cnt += (int) u[c];
        }
        return cnt;
    }
    
    void err(void) {
        printf("ERROR
    ");
        exit(0);
    }
    
    int main(void) 
    {
        freopen("enc.in","r",stdin)    ;
        freopen("enc.out","w",stdout)    ;
        scanf("%s
    %s
    %s
    ", a, b, c);
    
        int n = strlen(a);
        for (int i = 0; i < n; ++i) {
            if (m[b[i]] != 0 && m[b[i]] != a[i]) err();
            m[b[i]] = a[i];
            used_a[a[i]] = true;
            used_b[b[i]] = true;
        }
    
        if (count_unused(used_a) != count_unused(used_b))
            err();
    
        if (count_unused(used_a) == 25) {
            char a = find_unused(used_a);
            char b = find_unused(used_b);
            m[b] = a;
        }
    
        n = strlen(c);
        for (int i = 0; i < n; ++i) {
            if (m[c[i]] == 0) err();
            d[i] = m[c[i]];
        }
    
        printf("%s
    ", d);
        fclose(stdin);
        fclose(stdout);
    
        return 0;
    }

    求 lcs

    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <functional>
    #include <utility>
    
    using std::max;
    using std::min;
    
    const int MaxN = 100005;
    
    int n;
    int a[MaxN];
    int inv[MaxN];
    
    int main(void)
     {
         freopen("sort.in","r",stdin);
         freopen("sort.out","w",stdout);
        scanf("%d", &n);
        for (int i = 0; i < n; ++i)
            scanf("%d", a+i);
        memset(inv, 0x7f, sizeof(inv));
        inv[0] = -1;
        
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            int v = std::lower_bound(inv, inv+ans+1, a[i]) - inv;
            ans = max(ans, v);
            inv[v] = min(inv[v], a[i]);
        }
    
        printf("%d
    ", ans);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }

    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    
    const int MaxN = 5005;
    
    int n;
    int mat[MaxN][MaxN];
    int cycle[MaxN], cyclelen;
    int stack[MaxN], stop, spos[MaxN], vis[MaxN];
    
    bool dfs(int x) {
        vis[x] = 1, stack[stop++] = x, spos[x] = stop-1;
        for (int i = 0; i < n; ++i) {
            if (mat[x][i]) {
                if (vis[i] == 1) {
                    cyclelen = stop - spos[i];
                    memcpy(cycle, stack + spos[i], sizeof(int) * cyclelen);
                    return true;
                } else if (vis[i] == 0) {
                    bool v = dfs(i);
                    if (v) return true;
                }
            }
        }
        --stop, vis[x] = 2;
        return false;
    }
    
    void gen(void) {
        int m = cyclelen;
        for (int i = 1; i < m-1; ++i) {
            // check 1 i i+1
            if (mat[cycle[i+1]][cycle[0]]) {
                printf("%d %d %d
    ", cycle[0]+1, cycle[i]+1, cycle[i+1]+1);
            }
        }
    }
    char tmp[MaxN];
    
    int main(void) 
    {
        freopen("game.in","r",stdin)    ;
        freopen("game.out","w",stdout)    ;
        scanf("%d", &n);
        for (int i = 0; i < n; ++i) {
            scanf("
    %s", tmp);
            for (int j = 0; j < n; ++j) {
                mat[i][j] = tmp[j] == '1';
            }
        }
        for (int i = 0; i < n; ++i) {
            if (vis[i] == 0) {
                bool found = dfs(i);
                if (found) {
                    gen();
                    return 0;
                }
            }
        }
        printf("-1
    ");
        fclose(stdin);
        fclose(stdout);
        return 0;
    
    }
  • 相关阅读:
    数据库操作
    用php输出心形曲线
    Hibernate入门(一)
    JavaScript中的三种弹窗
    java过滤器(过滤器排序)
    java过滤器(简化认证)
    Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
    java回调函数学习
    继承
    多态(一)
  • 原文地址:https://www.cnblogs.com/shandongs1/p/9889546.html
Copyright © 2020-2023  润新知