QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#790757#9733. Heavy-light Decompositionucup-team4906#WA 0ms20260kbC++171.5kb2024-11-28 15:13:472024-11-28 15:13:47

Judging History

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

  • [2024-11-28 15:13:47]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:20260kb
  • [2024-11-28 15:13:47]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define pb push_back
using ll = long long;
using vi = vector<int>;
using vii = vector<vi>;

#define N 500010


int n, k;
int l[N], r[N];
int p[N];
vector<int>Num[N];

void solve()
{
    cin >> n >> k;
    int mx = 0, num = 0, mxid = 0;
    for (int i = 1; i <= k; i ++)
    {
        cin >> l[i] >> r[i];
        for (int j = l[i] + 1; j <= r[i]; j ++)p[j] = j - 1;
        p[l[i]] = 0;
        if (r[i] - l[i] + 1 > mx)mx = r[i] - l[i] + 1, num = 1, mxid = i;
        else if(r[i] - l[i] + 1 == mx)num ++;
    }
    if (num > 1 && num * mx == n) {cout << "IMPOSSIBLE\n"; return ;}

    for (int i = 1; i <= k; i ++) if (i != mxid)Num[r[i] - l[i] + 1].push_back(i);

    bool flag = 0;

    for (int j = r[mxid] - 1, L = 1; j >= l[mxid]; j --, L ++)
    {
        for (auto id : Num[L]) {p[l[id]] = j; if (j > l[mxid])flag = 1;}
    }

    if (flag == 0) 
    {
        cout << "IMPOSSIBLE\n";
        for (int i = 1; i <= n; i ++)Num[i].clear();
        return ;
    }
    for (int x : Num[mx])p[l[x]] = l[mxid];

    for (int i = 1; i <= n; i ++) cout << p[i] << ' '; cout << '\n';
    for (int i = 1; i <= n; i ++) Num[i].clear();
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T = 1;
    cin >> T;
    for (int i = 1; i <= T; i++)
        solve();

    return 0;
}
/*
 3
 12 5
 1 5
 9 11
 7 8
 6 6
 12 12
 4 3
 1 1
 4 4
 2 3
 2 2
 1 1
 2 2
*/

詳細信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 20260kb

input:

3
12 5
1 5
9 11
7 8
6 6
12 12
4 3
1 1
4 4
2 3
2 2
1 1
2 2

output:

0 1 2 3 4 4 3 7 2 9 10 4 
IMPOSSIBLE
IMPOSSIBLE

result:

wrong answer Case 2, jury find a solution while participant not. (test case 2)