zoukankan      html  css  js  c++  java
  • 第八届蓝桥杯省赛 方格切割

    标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如图:p1.png, p2.png, p3.png 就是可行的分割法。 试计算: 包括这3种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。 请提交该整数,不要填写任何多余的内容或说明文字。

     

    这里写图片描述 这里写图片描述这里写图片描述

    昨晚写的时候是从(1,1)开始搜的,想的是搜到第18个,然后判断对称的点是否都相等,若相等则这种情况可以,最后考完gg,想错了。

    今天看了网上的博客,是从(3,3)开始同时向两边搜,当扫到边界的时候,因为是同时向反方向扫的所以两个图形是一样的,此时就是一种情况。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <cmath>
    #include <map>
    #include <set>
    #define maxn 10010
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    int vis[10][10] = {0}, ans = 0;
    int dx[] = {0,0,1,-1}, dy[] = {1,-1,0,0};
    void dfs( int x, int y ) {
        if( x == 0 || y == 0 || x == 6 || y == 6 ) {
            ans ++;
            if( ans == 1 ) {
                for( int i = 1; i <= 6; i ++ ) {
                    for( int j = 1; j <= 6; j ++ ) {
                        cout << vis[i][j] << " ";
                    }
                    cout << endl;
                }
            }
            return ;
        }
        for( int i = 0; i < 4; i ++ ) {
            int xx = x + dx[i];
            int yy = y + dy[i];
            if( !vis[xx][yy] ) {
                vis[xx][yy] = 1;
                vis[6-xx][6-yy] = 1;
                dfs( xx, yy );
                vis[xx][yy] = 0;
                vis[6-xx][6-yy] = 0;
            }
        }
    }
    int main() {
        vis[3][3] = 1;
        dfs( 3, 3 );
        cout << ans / 4 << endl;
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    04、图的基本考点
    06、排序【应用篇】
    07、顺序表编程考点
    08、单链表编程考点
    04、css position 属性
    03、css float 浮动属性
    02、线性表基础考点
    软件工程博客---小学期--日报6
    软件工程博客---小学期--日报5(含周末)
    软件工程博客---小学期--日报4
  • 原文地址:https://www.cnblogs.com/l609929321/p/8672298.html
Copyright © 2011-2022 走看看