QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#469011#5956. Paradox Sortdspt32 ✓25ms3896kbC++231.1kb2024-07-09 09:53:292024-07-09 09:53:30

Judging History

你现在查看的是最新测评结果

  • [2024-07-09 09:53:30]
  • 评测
  • 测评结果:32
  • 用时:25ms
  • 内存:3896kb
  • [2024-07-09 09:53:29]
  • 提交

answer

#include <bitset>
#include <vector>
#include <stdio.h>
using namespace std;
bitset<200> v, b[200];
int n, m; vector<int> s; char a[200][200]; 
bool check(const int p)
{
    bitset<200> d, e; d[m] = e[m] = true; int i;
    while ((i = d._Find_first()) < n) { d[i] = false; if (!v[i]) d |= b[i] & ~e, e |= b[i]; }
    if (!e[p]) return false; e |= b[p] | v; return e.count() == n;
}
bool DFS(const int p)
{
    if (~p && !check(p)) return false;
    if (s.size() == n) { for (int i : s) printf("%d ", i); putchar('\n'); return true; }
    for (int i(0); i < n; ++i) if (!v[i])
    {
        v[i] = true; s.emplace_back(i);
        if (DFS(~p && b[p][i] ? p : i)) return true;
        v[i] = false; s.pop_back();
    }
    return false;
}
int main()
{
    int t; scanf("%d", &t); for (int c(1); c <= t; ++c) {
        scanf("%d%d", &n, &m);
        for (int i(0); i < n; ++i)
        {
            b[i].reset(); scanf("%s", a[i]);
            for (int j(0); j < n; ++j) if (a[i][j] == 'Y') b[i][j] = true;
        }
        printf("Case #%d: ", c); v.reset();
        if (DFS(-1)) s.clear(); else puts("IMPOSSIBLE");
    } return 0;
}

详细

Subtask #1:

score: 4
Accepted

Test #1:

score: 4
Accepted
time: 1ms
memory: 3856kb

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 ...

result:

ok 100 lines

Subtask #2:

score: 28
Accepted

Test #2:

score: 28
Accepted
time: 25ms
memory: 3896kb

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...

result:

ok 100 lines

Extra Test:

score: 0
Extra Test Passed