zoukankan      html  css  js  c++  java
  • hdu 4850 Wow! Such String!

    这是当时西安邀请赛的题目,也就是因为这道题,我们无缘银牌。。。

    其实这道题的大致想法当时我想出来了,就是我是想找到一条通过所有顶点的通路,顶点是所有的长度是4的子串。但是当时没有尝试搜索,以为不会这么简单就找到那条路。但是现在明白了,对于所有顶点度数为偶数的图,一定可以找到这样一条路的。

    下面是代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int mod = 26*26*26;
    const int maxn = 26*26*26*26;
    
    bool v[mod][30];
    int used[maxn + 10];
    char s[maxn + 10];
    int num = 0;
    
    int get_next(int a, int x)
    {
        a %= mod;
        a *= 26;
        a += x;
        return a;
    }
    
    int get_x(int a)
    {
        a %= mod;
        int ret = 0, t = a;
        for(int i = 0; i < 26; i++)
        {
            if(v[a][i])
            continue;
    
            if(ret == 0 || used[t] > used[a * 26 + i])
            t = a * 26 + i, ret = i;
        }
        v[a][ret] = 1;
        return ret;
    }
    
    void init()
    {
        int a = 0;
         num = 3;
        for(int i = 0; i < 3; i++)
        s[i] = 'a';
        while(1)
        {
            int x = get_x(a);
            a = get_next(a, x);
    
            if(used[a])
            return;
    
            used[a] = 1;
            s[num++] = 'a' + x;
        }
    }
    
    int main()
    {
        init();
        //cout << num << endl;
        int n;
        while(scanf("%d", &n) == 1)
        {
            if(n > num)
            printf("Impossible");
            else
            for(int i = 0; i < n; i++)
            printf("%c",s[i]);
            printf("
    ");
        }
    }
    View Code
  • 相关阅读:
    mysql总结
    git总结
    转:如何判断一家公司的好坏
    路越走越窄,尤其做技术的
    百度面试总结
    背叛
    which和whereis 命令
    bzoj3263 陌上花开 CDQ模板
    bzoj 2653middle
    暑假第十九测
  • 原文地址:https://www.cnblogs.com/ye8370/p/3899962.html
Copyright © 2011-2022 走看看