省选T1求Hack(思路是否错误)
  • 板块灌水区
  • 楼主野生林登万
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/4/1 19:53
  • 上次更新2023/10/23 19:44:08
查看原帖
省选T1求Hack(思路是否错误)
369942
野生林登万楼主2023/4/1 19:53

看到好多巨佬都用了很复杂的方法来做,当初孩子出考场就吓坏了,以为咱考虑少了,但是民间数据测了确实可以过.这个思路是否过于简单(感觉很直觉但是好像又有Hack但是又反驳了自己的Hack),于是来求各位帮忙看一下

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 1018 + 1108; 
struct Railway{
	int l,r;
}lw[MAXN],rw[MAXN];//leftway rightway
bool CmpL(Railway a,Railway b){
	return a.l < b.l;
}
bool CmpR(Railway a,Railway b){
	return a.r < b.r;
}
int n,m,x;
bool vis[MAXN];
inline void SolveL(){//to left
	int possL = x,pos;//possible left position
	for(pos = m;pos >= 1;pos--){//use CmpR
		if(rw[pos].r < possL)break;
		if(rw[pos].l < x)vis[rw[pos].l] = 1;
		possL = min(possL,rw[pos].l);
	}
	return ;
}
inline void SolveR(){
	int possR = x,pos;//possible right position
	for(pos = 1;pos <= m;pos++){//use CmpL
		if(lw[pos].l > possR)break;
		if(lw[pos].r > x)vis[lw[pos].r] = 1;
		possR = max(possR,lw[pos].r);
	}
	return ;
}
int main(){
	freopen("station.in","r",stdin);
	freopen("station.out","w",stdout);
	scanf("%d%d%d",&n,&m,&x);
	for(int i = 1;i <= m;i++){
		scanf("%d%d",&lw[i].l,&lw[i].r);
		rw[i] = lw[i];
	}
	sort(lw+1,lw+m+1,CmpL);
	sort(rw+1,rw+m+1,CmpR);
	SolveL();
	SolveR();
	for(int i = 1;i <= n;i++){
		if(vis[i] && x != i)printf("%d ",i);
	}
	return 0;
}
//9:04 az,神选T1这么简单啊 感谢**F给蒟蒻送的100pts 
//但是 为什么 为什么你要考tarjan
//你让我疯狂!!! (发电ing 
2023/4/1 19:53
加载中...