QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#414302#6705. MedianxiaoleAC ✓0ms3832kbC++231.5kb2024-05-18 20:36:022024-05-18 20:36:02

Judging History

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

  • [2024-05-18 20:36:02]
  • 评测
  • 测评结果:AC
  • 用时:0ms
  • 内存:3832kb
  • [2024-05-18 20:36:02]
  • 提交

answer

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

int n, m;

vector<int> e[MAXN + 10];
int pre[MAXN + 10], suc[MAXN + 10];
int vis[MAXN + 10];

// 找出 S 的所有后继,如果发现包含 S 的环返回 false,否则返回 true
bool bfs(int S) {
    queue<int> q;
    q.push(S); vis[S] = S;
    while (!q.empty()) {
        int sn = q.front(); q.pop();
        for (int fn : e[sn]) {
            if (fn == S) return false;
            if (vis[fn] == S) continue;
            q.push(fn); vis[fn] = S;
            // fn 是 S 的后继,S 也是 fn 的前继
            pre[fn]++; suc[S]++;
        }
    }
    return true;
}

void solve() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) e[i].clear();
    for (int i = 1; i <= m; i++) {
        int x, y; scanf("%d%d", &x, &y);
        e[x].push_back(y);
    }

    memset(pre, 0, sizeof(int) * (n + 3));
    memset(suc, 0, sizeof(int) * (n + 3));
    memset(vis, 0, sizeof(int) * (n + 3));
    for (int i = 1; i <= n; i++) if (!bfs(i)) {
        // 有环,无解
        for (int j = 1; j <= n; j++) printf("0");
        printf("\n");
        return;
    }

    for (int i = 1; i <= n; i++)
        // 前后继都不超过 floor(n / 2),可以作为中位数
        if (pre[i] <= n / 2 && suc[i] <= n / 2) printf("1");
        else printf("0");
    printf("\n");
}

int main() {
    int tcase; scanf("%d", &tcase);
    while (tcase--) solve();
    return 0;
}

这程序好像有点Bug,我给组数据试试?

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3796kb

input:

2
5 4
1 2
3 2
2 4
2 5
3 2
1 1
2 3

output:

01000
000

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 3832kb

input:

66
13 2
9 13
7 11
11 19
9 1
8 1
5 1
2 8
4 2
2 1
5 2
6 3
3 11
3 2
4 6
6 10
9 8
3 5
1 7
5 8
3 9
4 9
6 7
3 1
2 3
11 6
9 4
1 6
5 2
1 5
4 6
8 4
15 15
10 6
15 8
7 6
11 1
5 2
3 4
11 13
4 6
10 12
10 13
1 6
15 2
5 12
13 14
5 3
15 86
14 12
8 1
14 9
8 15
5 10
1 9
11 2
6 2
7 10
10 13
14 5
4 13
5 8
4 10
13 9
6 9...

output:

1111111111111
01001000111
111
11111111111
111111111111111
001001000000000
00100
01100
1111111
1000000000000
111101101
111111111
000011111011101
010111111
001100000
0100001001101
1111111111111
001000010000000
10010111011
001000000000100
11111111111
00100000011
11111
01000000110
11101110111
00000
1111...

result:

ok 66 lines