zoukankan      html  css  js  c++  java
  • USACO section1.2 Transformations

    模拟题,给出一个 n×n 的字符块的两个状态(分别为初始态和目标态)和几种操作,问目标态最少是由初始态的哪个操作完成的,WA 3 次。

    /*
    PROG: transform
    LANG: C++
    */
    # include <cstdio>
    # include <cstring>
    
    # define N 10 + 5
    
    void print(char s[][N], int n)
    {
        for (int i = 0; i < n; ++i)
            puts(s[i]);
    }
    
    /* rotate 90 degrees clockwise */
    void rotate(char s[][N], int n)
    {
        char buf[N][N];
    
        memset(buf, 0, sizeof(buf));
        for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            buf[i][j] = s[n-j-1][i];
        memcpy(s, buf, sizeof(buf));
        //print(s, n);
    }
    
    void mirror(char s[][N], int n)
    {
        char buf[N][N];
    
        memset(buf, 0, sizeof(buf));
        for (int i = 0; i < n; /*puts(buf[i]), */++i)
        for (int j = 0; j < n; ++j)
        {
            buf[i][j] = s[i][n-1-j];
        }
        memcpy(s, buf, sizeof(buf));
       // print(s, n);
    }
    
    char isEqual(char s[][N], char g[][N], int n)
    {
        for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            if (s[i][j] != g[i][j]) return 0;
        return 1;
    }
    
    int main()
    {
        freopen("transform.in", "r", stdin);
        freopen("transform.out", "w", stdout);
    
        int n;
        char s[N][N], f[N][N], g[N][N];
    
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)
            scanf("%s", s[i]);
        for(int i = 0; i < n; ++i)
            scanf("%s", g[i]);
    
        memcpy(f, s, sizeof(s));
        if (rotate(f, n), isEqual(f, g, n)) printf("1\n");
        else if (rotate(f, n), isEqual(f, g, n)) printf("2\n");
        else if (rotate(f, n), isEqual(f, g, n)) printf("3\n");
        else if (rotate(f, n), isEqual(s, g, n)) printf("6\n");
        else if (mirror(f, n), isEqual(f, g, n)) printf("4\n");
        else if (rotate(f, n), isEqual(f, g, n)) printf("5\n");
        else if (rotate(f, n), isEqual(f, g, n)) printf("5\n");
        else if (rotate(f, n), isEqual(f, g, n)) printf("5\n");
        else printf("7\n");
    
        fclose(stdin);
        fclose(stdout);
    
        return 0;
    }

    /**/

  • 相关阅读:
    还需要做恰当的解读,此时你可能需要一些书:
    创业公司的架构演进史
    任务调度平台Cuckoo-Schedule
    ORACLE中死锁
    Action的模型绑定
    三次握手、四次握手、backlog
    Django框架
    扩展BootstrapTable的treegrid功能
    Identity Service
    Linux权限
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2596427.html
Copyright © 2011-2022 走看看