zoukankan      html  css  js  c++  java
  • 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;    
    }
  • 相关阅读:
    模板【洛谷P3368】 【模板】树状数组 2
    模板【洛谷P3812】 【模板】线性基
    Java面向对象-多态
    Java常用工具类
    Java常用工具类
    Java static关键字
    MyBatis对象关联查询demo (一对多,多对一)
    将Cmder添加到系统右键菜单中
    IDEA 创建JavaWeb应用打包并发布
    IDEA 调试与打包
  • 原文地址:https://www.cnblogs.com/staginner/p/2606276.html
Copyright © 2011-2022 走看看