1. 程式人生 > 實用技巧 >2020 Multi-University Training Contest 4 1012 Last Problem(構造)

2020 Multi-University Training Contest 4 1012 Last Problem(構造)

題目

  http://acm.hdu.edu.cn/showproblem.php?pid=6813

題意

  給出一個無限大的二維平面,每次選擇一個點 ( x , y ) 將其染色為 n ,但是前提是,相鄰四個格子必須分別已經染了 n - 1 , n - 2 , n - 3 , n - 4 四種顏色,染色可以覆蓋,構造出一種合理的染色方案,使得可以在平面上出現顏色 n。

題解

  構造出如圖所示三角形,利用遞迴構造。

#include <bits/stdc++.h>
// #include <iostream>
// #include <cstring>
// #include <string>
// #include <algorithm> // #include <cmath> // #include <cstdio> // #include <queue> // #include <stack> // #include <map> // #include <bitset> // #include <set> // #include <vector> // #include <iomanip> #define ll long long #define ull unsigned long long #define
met(a, b) memset(a, b, sizeof(a)) #define rep(i, a, b) for(int i = a; i <= b; ++i) #define bep(i, a, b) for(int i = a; i >= b; --i) #define lowbit(x) (x&(-x)) #define MID (l + r) / 2 #define ls pos*2 #define rs pos*2+1 #define pb push_back #define ios() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) using
namespace std; const int maxn = 1e6 + 1010; const int inf = 0x3f3f3f3f; const ll INF = 0x3f3f3f3f3f3f3f3f; const ll mod = 1e9 + 7; const double eps = 1e-6; const double PI = acos(-1); int MAP[2010][2010]; void dfs(int x, int y, int val) { if(val <= 0) return; if(MAP[x - 1][y] != val - 1) dfs(x - 1, y, val - 1); if(MAP[x][y - 1] != val - 2) dfs(x, y - 1, val - 2); if(MAP[x][y + 1] != val - 3) dfs(x, y + 1, val - 3); if(MAP[x + 1][y] != val - 4) dfs(x + 1, y, val - 4); MAP[x][y] = val; printf("%d %d %d\n", x, y, val); } int main() { int n; scanf("%d", &n); dfs(1000, 1000, n); return 0; }