QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#867046#9733. Heavy-light DecompositionsqrteipiWA 1ms3584kbC++201.9kb2025-01-23 01:14:292025-01-23 01:14:30

Judging History

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

  • [2025-01-23 01:14:30]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3584kb
  • [2025-01-23 01:14:29]
  • 提交

answer

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

bool cmp(pair<int, int> p1, pair<int, int> p2) {
  return (p1.second - p1.first + 1) > (p2.second - p2.first + 1);
}

int main() {
  int tt;
  cin >> tt;
  while (tt--) {
    int n, m;
    cin >> n >> m;
    pair<int, int> arr[m];
    for (int i=0; i<m; i++) {
      int l, r;
      cin >> l >> r;
      arr[i] = {l, r};
    }
    sort(arr, arr + m);
    if (arr[0].first != 1 || arr[m - 1].second != n) cout << "IMPOSSIBLE\n";
    else {
      bool ok = true;
      for (int i=1; i<m; i++) {
        if (arr[i - 1].second + 1 != arr[i].first) {
          ok = false;
          break;
        }
      }
      if (!ok) cout << "IMPOSSIBLE\n";
      else {
        sort(arr, arr + m, cmp);
        if (arr[0].second - arr[0].first + 1 == arr[m - 1].second - arr[m - 1].first + 1) cout << "IMPOSSIBLE\n";
        else if (arr[0].second - arr[0].first + 1 == arr[1].second - arr[1].first + 1) {
          if (arr[0].second - arr[0].first + 1 >= arr[m - 1].second - arr[m - 1].first + 1 + 2) {
            int sol[n + 1];
            for (int i=0; i<=n; i++) sol[i] = 0;
            for (int i=0; i<m; i++) {
              auto [l, r] = arr[i];
              if (i == m - 1) sol[l] = arr[0].first + 1;
              else if (i > 0) sol[l] = arr[0].first;
              else sol[l] = 0;
              for (int j=l+1; j<=r; j++) sol[j] = j - 1;
            }
            for  (int i=1; i<=n; i++) cout << sol[i] << " ";
            cout << "\n";
          }
          else cout << "IMPOSSIBLE\n";
        }
        else {
          int sol[n + 1];
          for (int i=0; i<=n; i++) sol[i] = 0;
          for (int i=0; i<m; i++) {
            auto [l, r] = arr[i];
            if (i > 0) sol[l] = arr[0].first;
            for (int j=l+1; j<=r; j++) sol[j] = j - 1;
          }
          for  (int i=1; i<=n; i++) cout << sol[i] << " ";
          cout << "\n";
        }
      }
    }
  }
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3584kb

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 1 1 7 1 9 10 1 
2 0 2 2 
IMPOSSIBLE

result:

ok Correct. (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3456kb

input:

10
1 1
1 1
100000 1
1 100000
12 4
1 3
4 6
7 9
10 12
6 3
4 6
2 3
1 1
8999 3
1 3000
3001 6000
6001 8999
14 4
1 3
4 6
7 10
11 14
17 5
1 3
4 6
7 10
11 14
15 17
19999 2
1 9999
10000 19999
1 1
1 1
5 3
1 1
2 3
4 5

output:

IMPOSSIBLE
IMPOSSIBLE
IMPOSSIBLE
4 4 2 0 4 5 
IMPOSSIBLE
IMPOSSIBLE
IMPOSSIBLE
10000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75...

result:

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