From 29a147d3565b1293344fb784a2e4bf1931fa6c01 Mon Sep 17 00:00:00 2001 From: TooYoungTooSimp <6648049+TooYoungTooSimp@users.noreply.github.com> Date: Sun, 24 Nov 2019 17:09:36 +0800 Subject: [PATCH] Sun, 24 Nov 2019 17:09:36 +0800 --- .vscode/settings.json | 7 ++- Codeforces/1243B2.cpp | 108 +++++++++++++++++++++++++++++++++++++++ Codeforces/1255C.cpp | 114 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 Codeforces/1243B2.cpp create mode 100644 Codeforces/1255C.cpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 4746104..585278b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,11 @@ "csetjmp": "cpp", "cfloat": "cpp", "ciso646": "cpp", - "iosfwd": "cpp" + "iosfwd": "cpp", + "deque": "cpp", + "list": "cpp", + "vector": "cpp", + "xstring": "cpp", + "string": "cpp" } } \ No newline at end of file diff --git a/Codeforces/1243B2.cpp b/Codeforces/1243B2.cpp new file mode 100644 index 0000000..5d6566c --- /dev/null +++ b/Codeforces/1243B2.cpp @@ -0,0 +1,108 @@ +#define _CRT_SECURE_NO_WARNINGS +#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING +#include +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; +template +using comtype = typename common_type::type; +template +using enable_if_arithmetic = typename enable_if::value>::type; +template +using enable_if_integral = typename enable_if::value>::type; +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(T &x, Args &... args) { return read(x) && read(args...); } +template > +inline TResult mmin(CRP(T1, v1), CRP(T2, v2)) { return min(v1, v2); } +template > +inline TResult mmin(CRP(T, v), const Args &... args) { return min(v, mmin(args...)); } +template > +inline TResult mmax(CRP(T1, v1), CRP(T2, v2)) { return max(v1, v2); } +template > +inline TResult mmax(CRP(T, v), const Args &... args) { return max(v, mmax(args...)); } +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; +} +constexpr double eps = 1e-8; +inline int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0; } +char s[105], t[105]; +int cnt[1 << 8 | 1]; +vector> v; +int main() +{ + int k, n; + read(k); + while (k--) + { + CLR(cnt); + v.clear(); + read(n); + scanf("%s%s", s, t); + for (int i = 0; i < n; i++) cnt[s[i]]++, cnt[t[i]]++; + bool flag = false; + for (char ch = 'a'; ch <= 'z'; ch++) + if (cnt[ch] & 1) flag = true; + if (flag) + puts("No"); + else + { + puts("Yes"); + for (int i = 0; i < n; i++) + if (s[i] != t[i]) + if (char *pt = strchr(s + i + 1, s[i])) + { + v.push_back({pt - s + 1, i + 1}); + swap(*pt, t[i]); + } + else + { + pt = strchr(t + i + 1, s[i]); + v.push_back({n, pt - t + 1}); + v.push_back({n, i + 1}); + swap(s[n - 1], t[pt - t]); + swap(s[n - 1], t[i]); + } + printf("%d\n", v.size()); + for (const auto &x : v) printf("%d %d\n", x.first, x.second); + } + } + return 0; +} \ No newline at end of file diff --git a/Codeforces/1255C.cpp b/Codeforces/1255C.cpp new file mode 100644 index 0000000..e39d926 --- /dev/null +++ b/Codeforces/1255C.cpp @@ -0,0 +1,114 @@ +#define _CRT_SECURE_NO_WARNINGS +#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING +#include +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; +template +using comtype = typename common_type::type; +template +using enable_if_arithmetic = typename enable_if::value>::type; +template +using enable_if_integral = typename enable_if::value>::type; +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(T &x, Args &... args) { return read(x) && read(args...); } +template > +inline TResult mmin(CRP(T1, v1), CRP(T2, v2)) { return min(v1, v2); } +template > +inline TResult mmin(CRP(T, v), const Args &... args) { return min(v, mmin(args...)); } +template > +inline TResult mmax(CRP(T1, v1), CRP(T2, v2)) { return max(v1, v2); } +template > +inline TResult mmax(CRP(T, v), const Args &... args) { return max(v, mmax(args...)); } +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; +} +constexpr double eps = 1e-8; +inline int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0; } +const int N = 1e5 + 50; +struct +{ + ll v[3]; +} a[N]; +map> M; +void ins(int x) +{ + M[a[x].v[0]].insert(x); + M[a[x].v[1]].insert(x); + M[a[x].v[2]].insert(x); + M[a[x].v[0] << 32 | a[x].v[1]].insert(x); + M[a[x].v[1] << 32 | a[x].v[2]].insert(x); + M[a[x].v[0] << 32 | a[x].v[2]].insert(x); +} +void del(int x) +{ + M[a[x].v[0]].erase(x); + M[a[x].v[1]].erase(x); + M[a[x].v[2]].erase(x); + M[a[x].v[0] << 32 | a[x].v[1]].erase(x); + M[a[x].v[1] << 32 | a[x].v[2]].erase(x); + M[a[x].v[0] << 32 | a[x].v[2]].erase(x); +} +int cnt[N]; +int main() +{ + int n; + read(n); + for (int i = 2; i < n; i++) read(a[i].v[0], a[i].v[1], a[i].v[2]), sort(a[i].v, a[i].v + 3), ins(i); + for (int i = 2; i < n; i++) cnt[a[i].v[0]]++, cnt[a[i].v[1]]++, cnt[a[i].v[2]]++; + vector ans; + ans.push_back(-1); + for (int i = 1; i <= n; i++) + if (cnt[i] == 1) ans[0] = i; + int lasti = *M[ans[0]].begin(); + for (int i = 0; i < 3; i++) + if (cnt[a[lasti].v[i]] == 2) ans.push_back(a[lasti].v[i]); + for (int i = 2; i < n; i++) + { + ll prev1 = ans[i - 1], prev2 = ans[i - 2]; + if (prev1 > prev2) swap(prev1, prev2); + lasti = *M[prev1 << 32 | prev2].begin(); + ans.push_back(a[lasti].v[0] + a[lasti].v[1] + a[lasti].v[2] - prev1 - prev2); + del(lasti); + } + for (ll x : ans) printf("%lld ", x); + return 0; +} \ No newline at end of file