zoj 3810 A Volcanic Island(构造)

题目链接:zoj 3810 A Volcanic Island

题目大意:给定n,要求用n块面积为n的拼图铺满n?n的矩阵,任意两块拼图形状不能相同(包括旋转和镜像),并且n块拼图只能有4中颜色,相邻两块拼图颜色不能相同。

解题思路:构造,n = 2,3,4时是不存在的。然后对于n >= 5的直接构造,具体看代码。注意这种构造方式构造6的时候会出现相同的拼图,所以特判。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 105;
const char s[10][10] = {"BBBBBB", "GGRGRR", "GRRGRB", "GRGGRB", "GRGRRB", "GRGBBB"};
const char c[5] = "BGRY";

int g[maxn][maxn];

void solve (int n) {
    memset(g, 0, sizeof(g));

    for (int i = 0; i < n; i++)
        g[0][i] = 3;

    int k = (n - 1) / 2, col = 1;
    for (int i = 0; i < k; i++) {
        for (int j = 1; j <= i+1; j++)
            g[j][i+1] = col;
        for (int j = i+1; j < n; j++)
            g[j][i] = col;
        col = 3 - col;
    }

    for (int i = k; i < n; i++) {
        for (int j = 2; j <= i+2; j++)
            g[j][i+2] = col;
        g[i+2][i+1] = col;
        for (int j = i+2; j < n; j++)
            g[j][i] = col;
        col = 3 - col;
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            printf("%c", c[g[i][j]]);
        printf("\n");
    }
}

int main () {
    int cas, n;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%d", &n);
        if (n == 1)
            printf("B\n");
        else if (n == 6) {
            for (int i = 0; i < 6; i++)
                printf("%s\n", s[i]);
        } else if (n >= 5) {
            solve(n);
        } else
            printf("No solution!\n");
    }
    return 0;
}
时间: 2024-09-29 12:12:58

zoj 3810 A Volcanic Island(构造)的相关文章

ZOJ 3810 A Volcanic Island 构造题

题目链接:点击打开链接 学弟是厉害啊.. #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespace std; int vis[110][110],a[110][110],n; void fuck1() { for(int ii=1;ii<=n/2;ii++)//7 { int i

ZOJ 3810 - A Volcanic Island ( 构造 )

ZOJ 3810 - A Volcanic Island ( 构造 ) 题意: 给定一个N*N 的方格,需要用4种颜色进行染色, 要求:划分出N片区域,每片区域用一种颜色,且构造出的区域形状,颜色,旋转后的形状都不能相同 分析: 构造的题目一直都不是很好做,主要是因为自己智商太低.. 这个是看了郏老大的题解才会构造的,至于为什么这样构造.也说不出一个所以然来. 代码: #include <cstdio> #include <cstring> #include <algorit

ZOJ 3810 A Volcanic Island(四色定理模板)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5342 A Volcanic Island Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge An underwater volcano has erupted massively in somewhere of the deep Atlantis Ocean. This larg

ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题)

1.题目描写叙述:点击打开链接 2.解题思路:本题是四色定理的模板题.只是有几种情况要提前特判一下:n==1直接输出,1<n<5时候无解,n==6时候套用模板会出现同样的块.因此要特判一下.其它情况都能直接利用模板构造出来. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<cassert> #include<string>

ZOJ 3810 A Volcanic Island

题意: n*n的格子  将它分成n份大小为n的连通块  要求每个块形状不同  用4种颜色将格子染色后输出 思路: 纯构造题  考验智商  不过还是有思路可寻的 首先这题要想到将格子分区域的去做(想不到就没办法了-)假设我们两行为一个区域  那么将这两行划分成两个面积为n的块之后发现它们的形状必然相同  因此两行不行  所以我们尝试3行为1个区域!!  可以构造: 这样构造就可以保证形状不同  但是绿色会连上!!  那么我们通过奇偶性将图翻转  这样绿色就不会连上了  因为连起来至少需要绿色的外边

ZOJ 3810 Pretty Poem

Pretty Poem Time Limit: 2 Seconds     Memory Limit: 65536 KB Poetry is a form of literature that uses aesthetic and rhythmic qualities of language. There are many famous poets in the contemporary era. It is said that a few ACM-ICPC contestants can ev

托福分类词汇

托福分类词汇表(共17类863个常用单词) 一.   psychology 心理 1.       mental 心理的 2.       physical 身体的,物质的,物理的 3.       spiritual 心灵的 4.       conformity 从众 5.       majority 多数人 6.       minority 少数人 7.       threshold judgment (心理学)初始性判断 8.       subject 受实验对象 9.     

2014牡丹江网络预选赛B题(找规律)zoj3810

A Volcanic Island Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge An underwater volcano has erupted massively in somewhere of the deep Atlantis Ocean. This large eruption led to the birth of a new volcanic island, which had a sha

NEFU 506&amp;&amp;ZOJ 3353 Chess Board (四种构造的高斯消元)

题目链接 题意:有四种翻转方式,问是否能使得所有棋子都变为0,求最小步数. 题解:依次构造枚举求出最小值即可. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> #inclu