• SPOJ 4568 Rotating Rings


    SPOJ_4568

        这个题目相当于判断每个圈圈是否是循环同构的,因此可以用字符串的最小表示法来判断。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 1010
    int N, ini[MAXD][MAXD], g[MAXD][MAXD], a[MAXD << 3], b[MAXD << 3];
    int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
    bool equal(int *a, int *b, int n)
    {
        int i, j, k;
        i = j = k = 0;
        for(;;)
        {
            if(k == n)
                return 1;
            if(a[i + k] == b[j + k])
                ++ k;
            else if(a[i + k] < a[j + k])
                j = j + k + 1, k = 0;
            else
                i = i + k + 1, k = 0;
            if(i >= n || j >= n)
                break;
        }
        return 0;
    }
    void init()
    {
        int i, j;
        for(i = 1; i <= N; i ++)
            for(j = 1; j <= N; j ++)
            {
                ini[i][j] = (i - 1) * N + j;
                scanf("%d", &g[i][j]);    
            }
    }
    void genarate(int g[][MAXD], int *a, int x, int step)
    {
        int i, j, k = 0;
        int y = x;
        for(i = 0; i < 4; i ++)
            for(j = 0; j < step; j ++)
            {
                x += dx[i], y += dy[i];
                    a[k ++] = g[x][y];    
            }
        for(i = 0; i < k; i ++)
            a[k + i] = a[i];
    }
    void solve()
    {
        int i;
        for(i = 1; i <= (N >> 1); i ++)
        {
            genarate(ini, a, i, N + 1 - 2 * i), genarate(g, b, i, N + 1 - 2 * i);
            if(!equal(a, b, 4 * (N + 1 - 2 * i)))
            {
                printf("NO\n");
                return ;
            }
        }
        if((N & 1) && g[i][i] != ini[i][i])
            printf("NO\n");
        else
            printf("YES\n");
    }
    int main()
    {
        int t = 0;
        while(scanf("%d", &N), N)
        {
            init();
            printf("%d. ", ++ t);
            solve();    
        }
        return 0;    
    }
  • 相关阅读:
    Java
    oracle与mysql(2)
    oracle与mysql
    junit中的assert方法总结
    java Future用法和意义一句话击破
    Java序列化中的SerialVersionUid
    Nginx了解
    现如今的CDN网站加速技术,细说CDN
    slf4j日志的使用
    IDEA 快捷键整理
  • 原文地址:https://www.cnblogs.com/staginner/p/2606276.html
Copyright © 2020-2023  润新知