Submission #220390

#TimeUsernameProblemLanguageResultExecution timeMemory
220390WLZStray Cat (JOI20_stray)C++14
100 / 100
80 ms17472 KiB
#include "Anthony.h" #include <bits/stdc++.h> using namespace std; namespace { const vector<int> period = {0, 1, 0, 0, 1, 1}; struct edge { int from, to, idx; }; vector< vector<edge> > g; vector<int> solve1234(int N, int M, vector<int> U, vector<int> V) { queue<int> q; q.push(0); vector<int> dist(N, -1), ans(M, -1); dist[0] = 0; while (!q.empty()) { int u = q.front(); q.pop(); for (auto& e : g[u]) { if (dist[e.to] == -1) { dist[e.to] = dist[u] + 1; q.push(e.to); } } } for (int i = 0; i < M; i++) { ans[i] = min(dist[U[i]], dist[V[i]]) % 3; } return ans; } vector<int> solve567(int N, int M, vector<int> U, vector<int> V) { vector<int> prev(N, 1), was(N, 0), len(N, 0), ans(M, -1); queue<int> q; q.push(0); was[0] = 1; while (!q.empty()) { int u = q.front(); q.pop(); if ((int) g[u].size() == 2) { if (len[u] == 0) { if (prev[u] == 0) { len[u] = 1; } } } for (auto& e : g[u]) { if (!was[e.to]) { if ((int) g[u].size() == 2 || u == 0) { len[e.to] = len[u] + 1; ans[e.idx] = period[len[u] % 6]; } else { ans[e.idx] = !prev[u]; } q.push(e.to); was[e.to] = 1; prev[e.to] = ans[e.idx]; } } } return ans; } } vector<int> Mark(int N, int M, int A, int B, vector<int> U, vector<int> V) { g.resize(N); for (int i = 0; i < M; i++) { g[U[i]].push_back({U[i], V[i], i}); g[V[i]].push_back({V[i], U[i], i}); } if (A >= 3) { return solve1234(N, M, U, V); } else { return solve567(N, M, U, V); } }
#include "Catherine.h" #include <bits/stdc++.h> using namespace std; namespace { const vector<int> period = {0, 1, 0, 0, 1, 1}; vector<int> cur; int A, B, start = 1, rev = 0, last; } void Init(int A, int B) { ::A = A; ::B = B; } int Move(vector<int> y) { if (A >= 3) { for (int i = 0; i < 3; i++) { if (y[i] > 0 && y[(i + 1) % 3] > 0) { return i; } } for (int i = 0; i < 3; i++) { if (y[i] > 0) { return i; } } } else { if (rev) { int tmp = cur.back(); cur.pop_back(); if (cur.empty()) { rev = 0; } return (last = tmp); } if (y[0] > 1 && y[1] > 0) { start = 0; return (last = 1); } if (y[0] > 1 && y[1] > 0) { start = 0; return (last = 0); } if (y[0] == 0 && y[1] == 0) { start = 0; return (last = -1); } if (start) { if (y[0] > 0 && y[1] > 0 && !cur.empty()) { start = 0; return (last = !cur.back()); } if (cur.empty()) { if (y[0] == 1 && y[1] == 0) { start = 0; return 0; } if (y[1] == 1 && y[0] == 0) { start = 0; return 1; } } for (int i = 0; i < 2; i++) { if (y[i] > 0) { if (cur.empty()) { if (y[i] > 1) { cur.push_back(i); } else { cur.push_back(!i); } } else if (y[i] > 1) { start = 0; return -1; } cur.push_back(i); break; } } if ((int) cur.size() == 5) { start = 0; for (int i = 0; i < 6; i++) { int match = 1; for (int j = 0; j < 5; j++) { if (period[(i + j) % 6] != cur[j]) { match = 0; break; } } if (match) { rev = 1; cur.pop_back(); cur.pop_back(); return -1; } } } if (!rev) { return (last = cur.back()); } } else { if (y[0] == 1 && y[1] == 1) { last = !last; return last; } if (y[0] > 0) { return (last = 0); } return (last = 1); } } }

Compilation message (stderr)

Catherine.cpp: In function 'int Move(std::vector<int>)':
Catherine.cpp:112:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...