QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#422364 | #5956. Paradox Sort | helhy | 32 ✓ | 390ms | 3792kb | C++14 | 3.5kb | 2024-05-27 12:45:58 | 2024-05-27 12:45:59 |
Judging History
answer
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
const int N = 105;
int n, A;
bitset<N> out[N], in[N], vis;
void bfs(int S, bitset<N> g[N])
{
queue<int> q;
q.push(S);
vis[S] = true;
while (!q.empty())
{
int u = q.front();
q.pop();
for (int i = 0; i < n; i++)
{
if (g[u][i] && !vis[i])
{
vis[i] = true;
q.push(i);
}
}
}
}
int ans[N];
bool solve()
{
bitset<N> now, tmp;
int last = -1;
for (int i = 0; i < n; i++)
{
bool suc = false;
for (int u = 0; u < n; u++)
{
if (now[u]) continue;
if (~last && !out[last][u])
{
if (u == A) continue;
now[u] = true;
vis = now;
bfs(last, out);
tmp = vis;
vis = now;
bfs(A, in);
tmp = (tmp & vis) & ~now;
tmp[last] = true;
bool flag = true;
for (int v = 0; v < n; v++)
{
if (tmp[v] || now[v]) continue;
if ((out[v] & tmp).none())
{
now[u] = flag = false;
break;
}
}
if (flag)
{
ans[i] = u;
suc = true;
break;
}
}
else
{
if (u != A)
{
vis = now;
vis[u] = true;
bfs(u, out);
tmp = vis;
vis = now;
vis[u] = true;
bfs(A, in);
tmp = (tmp & vis) & ~now;
}
else
{
tmp.reset();
tmp[A] = true;
}
bool flag = true;
for (int v = 0; v < n; v++)
{
if (tmp[v] || now[v]) continue;
if ((out[v] & tmp).none())
{
flag = false;
break;
}
}
if (flag)
{
now[u] = suc = true;
ans[i] = last = u;
break;
}
}
}
if (!suc)
return false;
}
return true;
}
int main()
{
int T;
cin >> T;
for (int t = 1; t <= T; t++)
{
cin >> n >> A;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
char c;
scanf(" %c", &c);
in[i][j] = (c == 'Y');
out[i][j] = (c == 'N');
}
}
for (int i = 0; i < n; i++)
{
out[A][i] = false;
}
printf("Case #%d:", t);
if (!solve())
{
printf(" IMPOSSIBLE\n");
}
else
{
for (int i = 0; i < n; i++)
{
printf(" %d", ans[i]);
}
putchar('\n');
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 4
Accepted
Test #1:
score: 4
Accepted
time: 1ms
memory: 3792kb
input:
100 3 0 -YN N-Y YN- 2 0 -Y N- 5 0 -YNNN N-YNN YN-YN YYN-Y YYYN- 5 1 -NYYY Y-NNN NY-NY NYY-N NYNY- 6 5 -YYNNY N-YYNY NN-NYN YNY-NY YYNY-Y NNYNN- 4 0 -YYY N-YN NN-N NYY- 2 0 -Y N- 5 1 -NYNY Y-YYY NN-YY YNN-N NNNY- 7 5 -YYYYYY N-NNYYN NY-YNNN NYN-NYN NNYY-NN NNYNY-N NYYYYY- 8 0 -YNNNNNN N-YNNNNN YN-YNN...
output:
Case #1: 1 2 0 Case #2: 0 1 Case #3: 3 4 2 1 0 Case #4: 0 2 3 4 1 Case #5: 0 1 3 4 2 5 Case #6: 0 1 2 3 Case #7: 0 1 Case #8: 0 1 2 3 4 Case #9: IMPOSSIBLE Case #10: 6 7 5 4 3 2 1 0 Case #11: 0 1 2 Case #12: 0 1 Case #13: 0 1 Case #14: IMPOSSIBLE Case #15: IMPOSSIBLE Case #16: 7 8 6 5 4 3 1 2 0 Case...
result:
ok 100 lines
Subtask #2:
score: 28
Accepted
Test #2:
score: 28
Accepted
time: 390ms
memory: 3744kb
input:
100 39 0 -YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN N-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YYYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YYYYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN YYYYYYN-YNN...
output:
Case #1: 37 38 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Case #2: 0 13 23 28 30 34 38 40 41 42 43 46 49 51 52 33 5 1 17 32 15 29 19 10 16 47 48 9 4 27 6 7 18 31 8 11 26 50 3 37 25 35 45 20 24 39 22 12 44 36 2 21 14 Case #3: 0 1 2 3 4 5 6 8 9...
result:
ok 100 lines
Extra Test:
score: 0
Extra Test Passed