#P17127. 括号凸包
括号凸包
1003. 括号凸包
题目描述
给定二维平面上的 个点,所有点互不相同,且不存在三点共线。每个点上写有一个括号,可能是左括号 ,也可能是右括号 。
我们称一个字符串 是一个合法括号序列,当且仅当它可以由如下递归规则生成:
- 空串是一个合法括号序列;
- 如果 是合法括号序列,那么字符串 也是合法括号序列;
- 如果 和 都是合法括号序列,那么 也是合法括号序列。
例如,, , 都是合法括号序列,而 , , 不是合法括号序列。
现在,你需要从给定的点中选出若干个互不相同的点作为顶点,构成一个凸多边形。
在本题中,一个由 个点 构成的多边形被称为凸多边形,当且仅当满足:
- ;
- 这些点按照 的顺序依次连接,并连接 与 后,形成一个简单多边形(即多边形的边仅在相邻边的端点处相交,不相邻边互不相交);
- 对于该多边形的每一条边,其余所有顶点都严格位于这条边所在直线的同一侧。
换句话说,所选出的点必须恰好按照它们在自身凸包上的环形顺序排列,并且所有内角都严格小于 ,凸多边形上不存在三点共线。
对于一个凸多边形,任选其边界上的一个顶点作为起点,并沿着多边形边界按顺时针或逆时针方向依次遍历所有顶点,最后回到起点前停止。这样可以得到一个长度为 的括号序列:若当前顶点上写有左括号,则写下 ;若当前顶点上写有右括号,则写下 。
你的任务是找到包含左括号的凸多边形,使得对于该多边形上的任意一个写有左括号的顶点,以它作为起点沿多边形边界并以任意方向遍历得到的括号序列都是合法括号序列。但这样的多边形数量很多,所以你决定只计算满足条件的多边形个数对 取模后的结果。
输入格式
第一行包含一个整数 (),表示数据组数。
每组数据的第一行包含一个整数 (),表示点的数量。
接下来 行,每行包含三个整数 (),表示第 个点的坐标和括号类型,其中 表示左括号, 表示右括号。
保证每组数据中所有点互不相同,且不存在三点共线。
保证所有数据的 之和不超过 。
输出格式
对于每组数据,输出一行一个整数表示多边形的方案数取模后的结果
样例输入
5
4
1 1 0
2 4 1
3 9 0
4 16 1
5
1 1 0
2 4 0
3 9 0
4 16 1
5 25 1
6
47 58 0
30 23 0
27 34 1
35 7 1
10 30 1
1 25 1
8
10 5 0
10 16 0
1 5 0
24 9 0
6 2 0
6 12 0
7 18 1
3 13 1
1
0 0 0
样例输出
1
0
1
0
0
来源:2026杭电多校-测试专用(电子科大) 原题链接:http://acm.hdu.edu.cn/contest/problem_show.php?cid=1233&pid=1003