# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1239177 | Jer | Circle Passing (EGOI24_circlepassing) | C++20 | 785 ms | 16352 KiB |
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2010;
int n, m, q;
int k;
int d[MAXN][MAXN];
vector<int> con[MAXN];
void find(int a)
{
set<int> vis;
queue<int> q;
q.push(a);
int l = 0;
while (!q.empty())
{
int len = q.size();
for (int x = 0; x < len; x++)
{
int curr = q.front();
q.pop();
if (vis.find(curr) != vis.end())
continue;
vis.insert(curr);
d[curr][a] = l;
for (auto i : con[curr])
q.push(i);
}
l++;
}
}
int main()
{
scanf("%d%d%d", &n, &m, &q);
for (int i = 0; i < m; i++)
scanf("%d", &k), con[k].push_back(n + k), con[n + k].push_back(k);
for (int i = 0; i < 2 * n; i++)
{
if (i > 0)
con[i].push_back(i - 1);
if (i < 2 * n - 1)
con[i].push_back(i + 1);
}
con[0].push_back(2 * n - 1);
con[2 * n - 1].push_back(0);
for (int i = 0; i < 2 * n; i++)
find(i);
int a, b;
while (q--)
{
scanf("%d%d", &a, &b);
printf("%d\n", d[a][b]);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |