QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#582492#9221. Missing BoundariesDisplace_#WA 1ms5948kbC++142.2kb2024-09-22 16:38:542024-09-22 16:38:54

Judging History

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

  • [2024-09-22 16:38:54]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5948kb
  • [2024-09-22 16:38:54]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define se second
#define fi first
#define MAXN 1000010
const int mo=1e9+7;
using namespace std;
ll a[MAXN],b[MAXN];
ll t,n,cnt,min_occ,L;
set<int> s;
set<int>::iterator it;
vector<pii> seg;
vector<int> lb, rb;
vector<pii> vec;
void solve(){
	scanf("%lld",&n);
	scanf("%lld",&L);
	cnt=0;min_occ=0;
	s.clear();seg.clear();lb.clear();rb.clear();vec.clear();
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		scanf("%lld",&b[i]);
		int l=a[i],r=b[i];
		
		if(l==-1&&r==-1){
			++cnt;
			min_occ++;
		} 
		else if(l==-1){
			if(s.find(b[i]) != s.end()){
				printf("NIE\n");
				return;
			}
			s.insert(b[i]);
			min_occ++;
			rb.emplace_back(r);
		} 
		else if(r==-1){
			if(s.find(a[i]) != s.end()){
				printf("NIE\n");
				return;
			}
			s.insert(a[i]);
			min_occ++;
			lb.emplace_back(l);
		} 
		else{
			seg.emplace_back(l, r);
			min_occ += b[i]-a[i]+1;
			if(s.find(a[i]) != s.end()){
				printf("NIE\n");
				return;
			}
			s.insert(a[i]);
			if(s.find(b[i]) != s.end()){
				printf("NIE\n");
				return;
			}
			s.insert(b[i]);
		}
	}
	if(min_occ > L){
		printf("NIE\n");
		return;
	}
	sort(seg.begin(), seg.end());
	for(int i=0; i<(int)seg.size()-1; ++i){
		if(seg[i].se>=seg[i+1].fi){
			printf("NIE\n");
			return;
		}
	}
	for(int i=0;i<lb.size();i++){
		it = s.upper_bound(lb[i]);
		int u;
		if(it == s.end()){
			u = L;
		}
		else u = (*it)-1;
		s.insert(u);
		seg.emplace_back(lb[i],u);
	}
	for(int i=0;i<rb.size();i++){
		it = s.find(rb[i]);
		int u;
		if(it == s.begin()){
			u=1;
		}
		else{
			it--;
			u = (*it)+1;
		}
		s.insert(u);
		seg.emplace_back(u,rb[i]);
	}
	sort(seg.begin(), seg.end());
	/*for(int i=0;i<(int)seg.size();i++){
		printf("seg[%d]=%d,%d\n",i,seg[i].fi,seg[i].se);
	}
	for(int i=0; i<(int)seg.size()-1; ++i){
		if(seg[i].se>=seg[i+1].fi){
			printf("error\n");
		}
	}*/
	int curl=1,vcnt=0;
	for(int i=0; i<(int)seg.size(); ++i){
		if(curl<seg[i].fi)vcnt++;
		curl=seg[i].se+1;
	}
	if(curl<=L)vcnt++;
	if(vcnt > cnt){
		printf("NIE\n");
	}
	else printf("TAK\n");
}
int main(){
	cin >> t;
	for(int i=1;i<=t;i++){
		solve();
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: -100
Wrong Answer
time: 1ms
memory: 5948kb

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:

NIE

result:

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