QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#553578#9221. Missing Boundariesucup-team1069#WA 58ms13620kbC++232.4kb2024-09-08 15:50:122024-09-08 15:50:13

Judging History

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

  • [2024-09-08 15:50:13]
  • 评测
  • 测评结果:WA
  • 用时:58ms
  • 内存:13620kb
  • [2024-09-08 15:50:12]
  • 提交

answer

#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<stack>
#include<deque>
#include<queue>
#include<iomanip>
#include<cassert>
#include<map>
 
#define x first
#define y second
#define pb push_back
#define mp make_pair
#define sz(v) v.size()
#define up_b upper_bound
#define low_b lower_bound
#define all(v) v.begin(),v.end()

using namespace std;

typedef long long ll;
typedef long double ld;

const int mod = 1e9 + 7;
const int inf = 1e9+11;
const ll INF = 1e18;
const ld EPS = 1e-9;
const int dx[4] = {1,-1,0,0};
const int dy[4] = {0,0,1,-1};
const int N = 1e6 + 11;
const int M = 1e6 + 11;

ll a[N], b[N];

void solve(){
  int n, L;
  cin >> n >> L;
  vector<pair<pair<int, int>, int>> seg;
  a[0] = b[0] = 0;
  a[n + 1] = b[n + 1] = L + 1;
  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> b[i];
    if (a[i] != -1 || b[i] != -1) {
      int l = a[i];
      int r = b[i];
      if (l == -1) l = r;
      if (r == -1) r = l;
      seg.pb({{l, r}, i});
    }
  }
  seg.pb({{0, 0}, 0});
  seg.pb({{L + 1, L + 1}, n + 1});
  sort(all(seg));
  int len = 0;
  for (int i = 1; i < sz(seg); i++) {
    int p = seg[i].y;
    if (a[p] != -1 && b[p] != -1) continue;
    int q = seg[i - 1].y;
    int r = seg[i + 1].y;
    if (a[p] == -1) {
      a[p] = b[q] + 1;
      len += b[p] - a[p];
    }
    if (b[p] == -1) {
      if (a[r] != -1) b[p] = a[r] - 1;
      else b[p] = a[p];
      len += b[p] - a[p];
    }
  }
  seg.clear();
  for (int i = 1; i <= n; i++) {
    if (a[i] != -1 && b[i] != -1) {
      seg.pb({{a[i], b[i]}, i});
    }
  }
  sort(all(seg));
  for (int i = 0; i < sz(seg); i++) {
    if (seg[i].x.x > seg[i].x.y) {
      cout << "NIE";
      return ;
    }
    if (!i) continue;
    int diff = seg[i].x.x - seg[i - 1].x.y;
    if (diff <= 0) {
      cout << "NIE";
      return ;
    }
    len += diff - 1;
  }
  if (seg.empty()) {
    len += L;
  } else {
    len += seg[0].x.x - 1;
    len += L - seg[sz(seg) - 1].x.y;
  }
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] == -1 && b[i] == -1) cnt++;
  }
  cout << (cnt <= len ? "TAK" : "NIE");
}

int main() {
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int T = 1;
	cin >> T;
	for(int i = 1; i <= T; i++) {
//		cout << "Case #" << i << ": ";
		solve();
		cout<<"\n";
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3
4 51
1 -1
11 50
-1 -1
-1 10
3 2
-1 -1
-1 -1
-1 -1
2 3
1 2
2 3

output:

TAK
NIE
NIE

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 58ms
memory: 13620kb

input:

1
200000 1000000000
490669427 -1
224278942 224287156
821104480 -1
861696576 861702036
807438935 807440055
574078002 574083717
465630141 -1
195378188 -1
-1 13500961
-1 977536179
92893115 -1
-1 661145418
-1 215804863
-1 685338515
544348999 -1
465532902 -1
130346949 -1
-1 526666304
635604584 635605404
...

output:

TAK

result:

ok single line: 'TAK'

Test #3:

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

input:

3
4 51
1 -1
11 50
-1 -1
-1 10
3 2
-1 -1
-1 -1
-1 -1
2 3
1 2
2 3

output:

TAK
NIE
NIE

result:

ok 3 lines

Test #4:

score: 0
Accepted
time: 51ms
memory: 11784kb

input:

1
197838 400000
34167 34169
352180 -1
235963 -1
-1 -1
160401 160405
347288 -1
270353 270354
214502 214504
183243 183245
-1 -1
-1 36193
-1 -1
-1 17557
273498 273500
269137 -1
395099 395100
285515 285518
-1 -1
71041 71042
324060 -1
-1 385151
-1 379645
-1 -1
-1 185142
-1 191584
89259 89261
328347 32834...

output:

TAK

result:

ok single line: 'TAK'

Test #5:

score: 0
Accepted
time: 40ms
memory: 11772kb

input:

2
97340 150000
-1 101927
105937 -1
-1 107253
-1 47307
110550 -1
84061 84062
125176 125177
-1 15915
29617 -1
-1 -1
-1 43147
115958 -1
101807 101808
24866 -1
66826 66828
-1 31640
-1 5610
1281 1284
-1 -1
-1 -1
-1 73973
-1 2945
29064 -1
30653 -1
-1 63714
-1 -1
141389 141390
-1 27465
57358 -1
47388 47389...

output:

NIE
NIE

result:

ok 2 lines

Test #6:

score: -100
Wrong Answer
time: 49ms
memory: 8936kb

input:

4
50000 50000
11702 -1
-1 3148
30364 -1
48876 -1
-1 10739
-1 44459
11634 -1
39348 -1
38829 -1
16182 -1
37933 -1
35295 -1
43280 -1
37745 -1
-1 40076
358 -1
14043 -1
13975 -1
41942 -1
-1 13182
14780 -1
-1 14663
3998 -1
-1 24474
-1 6583
-1 9620
-1 37944
12103 -1
8307 -1
45760 -1
-1 2924
25441 -1
-1 194...

output:

TAK
NIE
NIE
TAK

result:

wrong answer 4th lines differ - expected: 'NIE', found: 'TAK'