首页 > 其他分享 >[ABC338E] Chords 题解

[ABC338E] Chords 题解

时间:2024-07-16 21:20:42浏览次数:7  
标签:存在 Chords int 题解 切开 曲线 ABC338E 交点

思路

思路还是很显然的,简单总结一下思路:

  1. 首先,将圆环从点 \(1\) 到 \(2N\) 切开,并将其拉直成一条直线。
  2. 在切开状态下,原来的弦变成了直线上的曲线。我们需要判断这些曲线之间是否存在交点。
  3. 在切开状态下,曲线之间的交点等价于满足 \(A_i < A_j < B_i < B_j\) 的不同曲线 \(i\) 和 \(j\) 的存在。
  4. 为了判断曲线之间是否存在交点,我们可以使用栈来管理曲线。首先,准备一个空栈 \(S\)。
  5. 遍历直线上的每个点,按顺序执行以下操作:
    • 如果当前点是某个曲线的左端点,将该曲线的标识符加入栈 \(S\) 的末尾。
    • 如果当前点是某个曲线的右端点,从栈 \(S\) 的末尾移除一个元素。
    • 如果移除的元素不是当前曲线的标识符,说明存在交点,返回结果并终止程序。
  6. 如果程序在遍历结束后没有返回结果,说明曲线之间不存在交点。

这种使用栈的算法能够在 \(O(N)\) 的时间复杂度内判断曲线之间是否存在交点。

代码

#include<bits/stdc++.h>
using namespace std;
pair<int,int> s[400010];
int stk[400010];
signed main() {
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		int a,b;
		cin>>a>>b;
		if(a>b) swap(a,b);
		s[a-1]={0,i};
		s[b-1]={1,i};
	}
	int p=0;
	for(int i=0;i<2*n;i++) {
		int t=s[i].first, num=s[i].second;
		if(t==0) stk[++p]=num;
		else {
			if(stk[p]!=num) {
				cout<<"Yes";
				return 0;
			}
			p--;
		}
	}
	cout<<"No";
	return 0;
}

标签:存在,Chords,int,题解,切开,曲线,ABC338E,交点
From: https://www.cnblogs.com/merlinkkk/p/18306134

相关文章

  • [ABC258Ex] Odd Steps 题解
    思路拿到这道题,第一时间肯定想到是\(dp\)题目。朴素DP用\(dp_i\)表示序列和为\(i\)的序列个数。因为原数组由奇数组成,所以\(dp\)只可能由\(dp_{i-1}\),\(dp_{i-3}\)等等转移过来,若\(i\inA\),\(dp_i=0\)。即:\[dp_i=\begin{cases}0&i\inA\\dp_{i-1}+dp_{i-3}+\c......
  • CF1859A题解
    CF1859A题解思路考虑一种极端情况,\(b\)数组内的数全部比\(a\)大,这样也无法整除,所以这就是这道题的突破口。我们让\(b\)数组内的数全部比\(a\)里的大,最方便的实现方法就是把原数组内的最大的数放进\(b\)数组,剩下的放进\(a\)数组。注意特判无解情况:原数组内的数一样,这......
  • [ABC352D]题解
    题意在长为\(n\)的序列\(a\)中找出\(k\)个数,设它们的下表为$p_1\(,\)p_2$到\(p_k\),满足这\(k\)个数从小到大排列过后是一个公差为\(1\)的等差数列。求满足条件的\(k\)个数的最大的\(p\)减去最小的\(p\)最小。输出这个值。思路把数组\(a\)排一遍序,滑动窗......
  • [ABC352E]题解
    思路这里提供一种暴力做法。方法就是当边数到达一个值过后就不加边了。我取的值是\(500000\),实际上可以开大一些,只要\(x\logx\)不超时就行了。代码赛时提交记录#include<bits/stdc++.h>usingnamespacestd;#defineintlonglonginta[200020];intcnt;structrec......
  • P10378 [GESP202403 七级] 交流问题题解
    思路我们把关系想成一张图,每次输入就给两个人连一条边。因为一个人只有两种选择,所以我们在一个联通块内随便找一个点,跑一遍搜索,找出这个联通块内的答案。代码如下。voiddfs(intu,intcolor){cnt2++;//cnt2是这个连通块内的总点数cnt1+=color;//这个是一所学校内......
  • 【题解】金明的预算方案
    原题传送门题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过\(n\)元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附......
  • P5537 题解
    blog。今天在XDFZ听ljy讲的串串(?)题,瞎写写就混了个最优解,来发个题解(注意到树的形态不变,所以可以记录兄弟间的编号rank。每个点就可以表示为若干rank构成的路径,例如下图:然后将每个点的这个路径压成hash,记为\(H_i\),并丢进map里。假设从\(x\)开始,可以完全遍历完\(a_......
  • C++题解(7) 信息学奥赛一本通:1055:判断闰年
    【题目描述】判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。【输入】输入只有一行,包含一个整数a(0<a<3000)。【输出】一行,如果公元a年是闰年输出Y,否则输出N。【输入样例】2006【输出样例】N【知识链接:如何判断闰年】(1)能被4整除,但不......
  • C++题解(6) 信息学奥赛一本通:2069:【例2.12 】糖果游戏
    【题目描述】某幼儿园里,有5个小朋友编号为1、2、3、4、5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。......
  • CF141B Hopscotch 题解
    Hopscotch题面翻译有nnn个形状和大小都一致的正方体积木,积木堆积的样式是第一层只有一个正方体,然后上面就开始循环了,循环体为:第一层是一个正方体,第二层是两个正方体。......