QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#422338#5956. Paradox Sortluanmenglei32 ✓149ms3668kbC++171.9kb2024-05-27 12:20:082024-05-27 12:20:09

Judging History

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

  • [2024-05-27 12:20:09]
  • 评测
  • 测评结果:32
  • 用时:149ms
  • 内存:3668kb
  • [2024-05-27 12:20:08]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

namespace SOL {

using i64 = long long;
void debug(const char *msg, ...) {
#ifdef CLESIP
    va_list arg;
    static char pbString[512];
    va_start(arg,msg);
    vsprintf(pbString,msg,arg);
    cerr << "[DEBUG] " << pbString << "\n";
    va_end(arg);
#endif    
}
template<typename T, typename L>
bool chkmax(T &x, L y) { if (x < y) return x = y, true; return false; }
template<typename T, typename L>
bool chkmin(T &x, L y) { if (y < x) return x = y, true; return false; }

const int N = 110;
int n, st, ans[N];
bool g[N][N], vis[N], in[N];
char s[N];

void dfs(int x) {
	if (vis[x])
		return;
	vis[x] = 1;
	for (int i = 1; i <= n; i ++)
		if (g[i][x] && !in[i])
			dfs(i);
}

bool check(int pre) {
	for (int i = 1; i <= n; i ++)
		vis[i] = 0;
	vis[pre] = 1;
	dfs(st);
	for (int i = 1; i <= n; i ++)
		if (!vis[i] && !in[i] && !g[i][pre])
			return 0;
	return 1;
}

void solve(int kase) {
	cout << "Case #" << kase << ": ";
	cin >> n >> st; st += 1;
	for (int i = 1; i <= n; i ++)
		vis[i] = in[i] = false;
	for (int i = 1; i <= n; i ++) {
		cin >> (s + 1);
		for (int j = 1; j <= n; j ++) {
			if (s[j] == 'Y')
				g[j][i] = 1;
			else
				g[j][i] = 0;
		}
	}
	dfs(st);
	for (int i = 1; i <= n; i ++)
		if (!vis[i]) {
			cout << "IMPOSSIBLE\n";
			return;
		}
	int pre = -1;
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= n; j ++) if (!in[j]) {
			if (pre != -1 && j == st && g[st][pre])
				continue;
			int cur = pre;
			if (cur == -1 || g[cur][j])
				cur = j;
			in[j] = 1;
			if (check(cur)) {
				pre = cur;
				ans[i] = j;
				break;
			}
			in[j] = 0;
		}
	}
	for (int i = 1; i <= n; i ++)
		cout << ans[i] - 1 << " \n"[i == n];
}

}
int main() {
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int tt; cin >> tt;
	for (int t = 1; t <= tt; t ++)
		SOL::solve(t);
	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: 3668kb

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: 149ms
memory: 3648kb

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