# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
70664 | octopuses | Alternating Current (BOI18_alternating) | C++17 | 3040 ms | 5416 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//Giorgi Kldiashvili
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 100020;
int n, m;
inline int dis(int x, int y)
{
if(y < x)
return n + y - x + 1;
return y - x + 1;
}
vector < pair < int, int > > A[N];
int answer[N], S[N][2];
int main()
{
scanf("%d %d", &n, &m);
int ci, cm; ci = cm = 0;
for(int i = 1; i <= m; ++ i)
{
int x, y;
scanf("%d %d", &x, &y);
A[x - 1].push_back(make_pair(dis(x, y), i));
if(dis(x, y) > cm)
ci = x - 1, cm = dis(x, y);
}
for(ci = 0; ci < n; ++ ci)
{
for(int p = 0; p < n; ++ p)
{
int i = (p + ci) % n;
for(int j = 0; j < A[i].size(); ++ j)
{
int x = A[i][j].first;
int c = 0;
for(int k = 0; k < n; ++ k)
{
int now = (i + k) % n;
if(S[now][0] == 0)
{
c = 0;
break;
}
if(S[now][1] == 0)
{
c = 1;
break;
}
}
answer[A[i][j].second] = c;
for(int k = 0; k < x; ++ k)
S[(i + k) % n][c] = 1;
}
}
bool B = true;
for(int i = 0; i < n; ++ i)
if(S[i][0] == 0 || S[i][1] == 0)
{
B = false; break;
}
if(B) break;
for(int i = 0; i < n; ++ i)
S[i][0] = S[i][1] = 0;
}
for(int i = 0; i < n; ++ i)
if(S[i][0] == 0 || S[i][1] == 0)
return printf("impossible"), 0;
for(int i = 1; i <= m; ++ i)
printf("%d", answer[i]);
}
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... |