QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#553581#9221. Missing Boundariesucup-team1069#WA 0ms5536kbC++232.6kb2024-09-08 15:55:552024-09-08 15:55:55

Judging History

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

  • [2024-09-08 15:55:55]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:5536kb
  • [2024-09-08 15:55:55]
  • 提交

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));
  int x = 0;
  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 (diff > 0) x++;
  }
  if (seg.empty()) {
    len += L;
    x++;
  } else {
    len += seg[0].x.x - 1;
    if (seg[0].x.x > 1) x++;
    len += L - seg[sz(seg) - 1].x.y;
    if (seg[sz(seg) - 1].x.y < L) x++;
  }
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] == -1 && b[i] == -1) cnt++;
  }
  cout << (cnt <= len && cnt >= x ? "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";
	}
}

详细

Test #1:

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

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:

NIE
NIE
NIE

result:

wrong answer 1st lines differ - expected: 'TAK', found: 'NIE'