From 577f58abf2b5b6eb4cd048d4127d4e84703b0f70 Mon Sep 17 00:00:00 2001 From: TooYoungTooSimp <6648049+TooYoungTooSimp@users.noreply.github.com> Date: Sat, 23 Nov 2019 12:51:43 +0800 Subject: [PATCH] Sat, 23 Nov 2019 12:51:43 GMT --- Article6/1.1/1753.cpp | 170 ++++++++++++++++++++++++++++++++++++++++++ Article6/1.1/2965.cpp | 164 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 334 insertions(+) create mode 100644 Article6/1.1/1753.cpp create mode 100644 Article6/1.1/2965.cpp diff --git a/Article6/1.1/1753.cpp b/Article6/1.1/1753.cpp new file mode 100644 index 0000000..c97bbe2 --- /dev/null +++ b/Article6/1.1/1753.cpp @@ -0,0 +1,170 @@ +#define _CRT_SECURE_NO_WARNINGS +#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING +#ifdef ONLINE_JUDGE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +typedef long long int64_t; +typedef unsigned long long uint64_t; +#else +#include +#endif +using namespace std; +#define CRP(t, x) const t &x +#define OPX(op, t, x) operator op(CRP(t, x)) +#define OPL(t, x) bool OPX(<, t, x) const +#define FIL(x, v) memset(x, v, sizeof(x)) +#define CLR(x) FIL(x, 0) +#define NE1(x) FIL(x, -1) +#define INF(x) FIL(x, 0x3f) +#ifndef _DEBUG +#define _DEBUG 0 +#endif // !_DEBUG +#define IFD if (_DEBUG) +typedef int64_t ll, i64; +typedef uint64_t ull, u64; +inline char getchar(int) +{ + static char buf[64 << 20], *S = buf, *T = buf; + if (S == T) T = fread(S = buf, 1, 64 << 20, stdin) + buf; + return S == T ? EOF : *S++; +} +template +inline bool read(T &x) +{ + int ch = x = 0, f = 1; + while (!isdigit(ch = getchar())) + if (ch == EOF) + return false; + else if (ch == '-') + f = 0; + for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0'; + return x = f ? x : -x, true; +} +template +inline bool read(T1 &v1, T2 &v2) { return read(v1) && read(v2); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3) { return read(v1) && read(v2) && read(v3); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4) { return read(v1) && read(v2) && read(v3) && read(v4); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5) { return read(v1) && read(v2) && read(v3) && read(v4) && read(v5); } +inline ll gcd(ll a, ll b) +{ + for (; b; swap(a, b)) a %= b; + return a; +} +inline ll fpow(ll a, ll b, ll m) +{ + ll r = 1; + for (; b; b >>= 1, a = a * a % m) + if (b & 1) r = r * a % m; + return r; +} +const double eps = 1e-8; +inline int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0; } +int arr[6][6]; +inline int pack() +{ + int r = 0; + for (int i = 1; i <= 4; i++) + for (int j = 1; j <= 4; j++) + r = r << 1 | arr[i][j]; + return r; +} +inline void unpack(int x) +{ + for (int i = 4; i; i--) + for (int j = 4; j; j--) + arr[i][j] = x & 1, x >>= 1; +} +bool vis[1 << 16 | 1]; +int main() +{ + char buf[8]; + for (int i = 1; i <= 4; i++) + { + scanf("%s", buf + 1); + for (int j = 1; j <= 4; j++) + arr[i][j] = buf[j] == 'w'; + } + queue> Q; + int curSt = pack(), cntSt; + vis[curSt] = true; + Q.push({curSt, 0}); + for (; !Q.empty(); Q.pop()) + { + curSt = Q.front().first; + cntSt = Q.front().second; + if (curSt == 0 || curSt + 1 == (1 << 16)) return printf("%d", cntSt), 0; + unpack(curSt); + for (int i = 1; i <= 4; i++) + for (int j = 1; j <= 4; j++) + { + arr[i][j] ^= 1; + arr[i + 1][j] ^= 1; + arr[i][j + 1] ^= 1; + arr[i - 1][j] ^= 1; + arr[i][j - 1] ^= 1; + int nxtSt = pack(); + if (!vis[nxtSt]) + { + vis[nxtSt] = true; + Q.push({nxtSt, cntSt + 1}); + } + arr[i][j] ^= 1; + arr[i + 1][j] ^= 1; + arr[i][j + 1] ^= 1; + arr[i - 1][j] ^= 1; + arr[i][j - 1] ^= 1; + } + } + puts("Impossible"); + return 0; +} \ No newline at end of file diff --git a/Article6/1.1/2965.cpp b/Article6/1.1/2965.cpp new file mode 100644 index 0000000..8c9a405 --- /dev/null +++ b/Article6/1.1/2965.cpp @@ -0,0 +1,164 @@ +#define _CRT_SECURE_NO_WARNINGS +#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING +#ifdef ONLINE_JUDGE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +typedef long long int64_t; +typedef unsigned long long uint64_t; +#else +#include +#endif +using namespace std; +#define CRP(t, x) const t &x +#define OPX(op, t, x) operator op(CRP(t, x)) +#define OPL(t, x) bool OPX(<, t, x) const +#define FIL(x, v) memset(x, v, sizeof(x)) +#define CLR(x) FIL(x, 0) +#define NE1(x) FIL(x, -1) +#define INF(x) FIL(x, 0x3f) +#ifndef _DEBUG +#define _DEBUG 0 +#endif // !_DEBUG +#define IFD if (_DEBUG) +typedef int64_t ll, i64; +typedef uint64_t ull, u64; +inline char getchar(int) +{ + static char buf[64 << 20], *S = buf, *T = buf; + if (S == T) T = fread(S = buf, 1, 64 << 20, stdin) + buf; + return S == T ? EOF : *S++; +} +template +inline bool read(T &x) +{ + int ch = x = 0, f = 1; + while (!isdigit(ch = getchar())) + if (ch == EOF) + return false; + else if (ch == '-') + f = 0; + for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0'; + return x = f ? x : -x, true; +} +template +inline bool read(T1 &v1, T2 &v2) { return read(v1) && read(v2); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3) { return read(v1) && read(v2) && read(v3); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4) { return read(v1) && read(v2) && read(v3) && read(v4); } +template +inline bool read(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5) { return read(v1) && read(v2) && read(v3) && read(v4) && read(v5); } +inline ll gcd(ll a, ll b) +{ + for (; b; swap(a, b)) a %= b; + return a; +} +inline ll fpow(ll a, ll b, ll m) +{ + ll r = 1; + for (; b; b >>= 1, a = a * a % m) + if (b & 1) r = r * a % m; + return r; +} +const double eps = 1e-8; +inline int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0; } +int arr[6][6]; +inline int pack() +{ + int r = 0; + for (int i = 1; i <= 4; i++) + for (int j = 1; j <= 4; j++) + r = r << 1 | arr[i][j]; + return r; +} +inline void unpack(int x) +{ + for (int i = 4; i; i--) + for (int j = 4; j; j--) + arr[i][j] = x & 1, x >>= 1; +} +int ansv = 100; +pair ans[17], a[17]; +void dfs(int x, int y, int st) +{ + if (pack() == 0 && st < ansv) + return memcpy(ans, a, sizeof(pair) * (ansv = st)), void(); + if (x > 4) return; + if (y < 4) + dfs(x, y + 1, st); + else + dfs(x + 1, 1, st); + a[st] = {x, y}; + for (int k = 1; k <= 4; k++) + arr[x][k] ^= 1, arr[k][y] ^= 1; + arr[x][y] ^= 1; + if (y < 4) + dfs(x, y + 1, st + 1); + else + dfs(x + 1, 1, st + 1); + for (int k = 1; k <= 4; k++) + arr[x][k] ^= 1, arr[k][y] ^= 1; + arr[x][y] ^= 1; +} +int main() +{ + char buf[8]; + for (int i = 1; i <= 4; i++) + { + scanf("%s", buf + 1); + for (int j = 1; j <= 4; j++) + arr[i][j] = buf[j] == '+'; + } + dfs(1, 1, 0); + printf("%d\n", ansv); + for (int i = 0; i < ansv; i++) + printf("%d %d\n", ans[i].first, ans[i].second); + return 0; +} \ No newline at end of file