From c2e6cadefac658ea427d8c416857fea2ff6e9240 Mon Sep 17 00:00:00 2001 From: Frederick Chen Date: Sat, 19 Apr 2025 10:11:24 +0800 Subject: [PATCH] AtCoder Beginner Contest 395 https://atcoder.jp/contests/abc395 Signed-off-by: Frederick Chen --- atcoder/abc395/A_Strictly_Increasing.cpp | 37 +++++++++++++ atcoder/abc395/B_Make_Target.cpp | 42 ++++++++++++++ .../abc395/C_Shortest_Duplicate_Subarray.cpp | 49 +++++++++++++++++ atcoder/abc395/D_Pigeon_Swap(WA).cpp | 55 +++++++++++++++++++ 4 files changed, 183 insertions(+) create mode 100644 atcoder/abc395/A_Strictly_Increasing.cpp create mode 100644 atcoder/abc395/B_Make_Target.cpp create mode 100644 atcoder/abc395/C_Shortest_Duplicate_Subarray.cpp create mode 100644 atcoder/abc395/D_Pigeon_Swap(WA).cpp diff --git a/atcoder/abc395/A_Strictly_Increasing.cpp b/atcoder/abc395/A_Strictly_Increasing.cpp new file mode 100644 index 0000000..0d6d96e --- /dev/null +++ b/atcoder/abc395/A_Strictly_Increasing.cpp @@ -0,0 +1,37 @@ +#include +#define lo long long +#define INF INT_MAX +#define LLM LONG_LONG_MAX +#define endl "\n" + +using namespace std; +/* + toothless. #17 + @fredcss_dev +*/ + +int n, a[1000005], b[1000005]; +bool f[100000005]; + +signed main() +{ + cin >> n; + for (int i = 1; i <= n; i++) { + cin >> a[i]; + b[i] = a[i]; + if (!f[a[i]]) f[a[i]] = 1; + else { + cout << "No"; + return 0; + } + } + sort(a + 1, a + 1 + n); + for (int i = 1; i <= n; i++) { + if (a[i] != b[i]) { + cout << "No"; + return 0; + } + } + cout << "Yes"; + return 0; +} \ No newline at end of file diff --git a/atcoder/abc395/B_Make_Target.cpp b/atcoder/abc395/B_Make_Target.cpp new file mode 100644 index 0000000..bc9525f --- /dev/null +++ b/atcoder/abc395/B_Make_Target.cpp @@ -0,0 +1,42 @@ +#include +#define lo long long +#define InF InT_MAX +#define LLM LOnG_LOnG_MAX +#define endl "\n" + +using namespace std; +/* + toothless. #17 + @fredcss_dev +*/ + +int n; + +void wczffl_503() +{ + vector> grid(n, vector(n, '.')); + for (int i = 1; i <= n; ++i) { + int j = n + 1 - i; + if (i > j) continue; + + char fillChar = (i % 2 == 1) ? '#' : '.'; + + for (int k = i - 1; k < j; ++k) { + for (int l = i - 1; l < j; ++l) { + grid[k][l] = fillChar; + } + } + } + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + cout << grid[i][j]; + } + cout << endl; + } +} + +signed main() { + cin >> n; + wczffl_503(); + return 0; +} \ No newline at end of file diff --git a/atcoder/abc395/C_Shortest_Duplicate_Subarray.cpp b/atcoder/abc395/C_Shortest_Duplicate_Subarray.cpp new file mode 100644 index 0000000..4480595 --- /dev/null +++ b/atcoder/abc395/C_Shortest_Duplicate_Subarray.cpp @@ -0,0 +1,49 @@ +#include +#define lo long long +#define INF INT_MAX +#define LLM LONG_LONG_MAX +#define endl "\n" + +using namespace std; +/* + toothless. #17 + @fredcss_dev +*/ + +int wczffl_503(int N, vector& A) { + for (int i = 0; i < N - 1; ++i) { + if (A[i] == A[i + 1]) { + return 2; + } + } + unordered_map> pos; + for (int i = 0; i < N; ++i) { + pos[A[i]].push_back(i); + } + int mn = INT_MAX; + for (const auto& entry : pos) { + const vector& vt = entry.second; + if (vt.size() < 2) continue; + + for (size_t i = 0; i < vt.size() - 1; ++i) { + int now = vt[i + 1] - vt[i] + 1; + if (now < mn) { + mn = now; + } + } + } + return (mn != INT_MAX) ? mn : -1; +} + +int N; + +signed main() { + cin >> N; + vector A(N); + for (int i = 0; i < N; ++i) { + cin >> A[i]; + } + int res = wczffl_503(N, A); + cout << res; + return 0; +} \ No newline at end of file diff --git a/atcoder/abc395/D_Pigeon_Swap(WA).cpp b/atcoder/abc395/D_Pigeon_Swap(WA).cpp new file mode 100644 index 0000000..573ebde --- /dev/null +++ b/atcoder/abc395/D_Pigeon_Swap(WA).cpp @@ -0,0 +1,55 @@ +// 这个代码尚未正确,仅作参考价值 + +#include +#define lo long long +#define INF INT_MAX +#define LLM LONG_LONG_MAX +#define endl "\n" + +using namespace std; +/* + toothless. #17 + @fredcss_dev +*/ + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + cout.tie(0); + int N, Q; + cin >> N >> Q; + vector pigeon_to_nest(N + 1); + vector> nest_to_pigeons(N + 1); + for (int i = 1; i <= N; ++i) { + pigeon_to_nest[i] = i; + nest_to_pigeons[i].insert(i); + } + for (int q = 0; q < Q; ++q) { + int type; + cin >> type; + + if (type == 1) { + int a, b; + cin >> a >> b; + int current_nest = pigeon_to_nest[a]; + nest_to_pigeons[current_nest].erase(a); + pigeon_to_nest[a] = b; + nest_to_pigeons[b].insert(a); + } else if (type == 2) { + int a, b; + cin >> a >> b; + swap(nest_to_pigeons[a], nest_to_pigeons[b]); + for (int pigeon : nest_to_pigeons[a]) { + pigeon_to_nest[pigeon] = a; + } + for (int pigeon : nest_to_pigeons[b]) { + pigeon_to_nest[pigeon] = b; + } + } else if (type == 3) { + int a; + cin >> a; + cout << pigeon_to_nest[a] << endl; + } + } + return 0; +}