CF1158D.Winding polygonal line
省选/NOI-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Vasya has n different points A1,A2,…An on the plane. No three of them lie on the same line He wants to place them in some order Ap1,Ap2,…,Apn, where p1,p2,…,pn — some permutation of integers from 1 to n.
After doing so, he will draw oriented polygonal line on these points, drawing oriented segments from each point to the next in the chosen order. So, for all 1≤i≤n−1 he will draw oriented segment from point Api to point Api+1. He wants to make this polygonal line satisfying 2 conditions:
- it will be non-self-intersecting, so any 2 segments which are not neighbors don't have common points.
- it will be winding.
Vasya has a string s, consisting of (n−2) symbols "L" or "R". Let's call an oriented polygonal line winding, if its i-th turn left, if $s_i = $ "L" and right, if $s_i = $ "R". More formally: i-th turn will be in point Api+1, where oriented segment from point Api to point Api+1 changes to oriented segment from point Api+1 to point Api+2. Let's define vectors v1=ApiApi+1 and v2=Api+1Api+2. Then if in order to rotate the vector v1 by the smallest possible angle, so that its direction coincides with the direction of the vector v2 we need to make a turn counterclockwise, then we say that i-th turn is to the left, and otherwise to the right. For better understanding look at this pictures with some examples of turns:
There are left turns on this picture
There are right turns on this picture
You are given coordinates of the points A1,A2,…An on the plane and string s. Find a permutation p1,p2,…,pn of the integers from 1 to n, such that the polygonal line, drawn by Vasya satisfy two necessary conditions.
瓦西里在平面上有 n 个互不相同的点 A1,A2,…,An,且其中任意三点均不共线。他希望将这些点按某种顺序排列为 Ap1,Ap2,…,Apn,其中 p1,p2,…,pn 是 1 到 n 的一个排列。
完成排序后,他将按此顺序在这些点上绘制一条有向折线:对每个 1≤i≤n−1,从点 Api 向点 Api+1 绘制一条有向线段。他希望该折线满足以下两个条件:
- 不自交:任意两条不相邻的线段没有公共点;
- 具有指定的“卷绕性”(winding)。
瓦西里有一个长度为 (n−2) 的字符串 s,其每个字符均为 "L" 或 "R"。我们称一条有向折线是卷绕的,当且仅当它的第 i 个转向为左转(若 $s_i = $ "L")或右转(若 $s_i = $ "R")。更准确地说:第 i 个转向发生在点 Api+1 处,即有向线段 ApiApi+1 变为有向线段 Api+1Api+2 的位置。定义向量 v1=ApiApi+1 和 v2=Api+1Api+2。若将向量 v1 绕起点以最小角度旋转至与 v2 同向时需逆时针旋转,则称第 i 个转向为左转;否则为右转。为便于理解,请参看以下示意图中的转向示例:
此图中所有转向均为左转
此图中所有转向均为右转
现给定平面上点 A1,A2,…,An 的坐标以及字符串 s,请找出 1 到 n 的一个排列 p1,p2,…,pn,使得瓦西里所绘制的折线满足上述两个必要条件。
输入格式
The first line contains one integer n — the number of points (3≤n≤2000). Next n lines contains two integers xi and yi, divided by space — coordinates of the point Ai on the plane (−109≤xi,yi≤109). The last line contains a string s consisting of symbols "L" and "R" with length (n−2). It is guaranteed that all points are different and no three points lie at the same line.
第一行包含一个整数 n —— 点的数量(3≤n≤2000)。接下来的 n 行每行包含两个由空格分隔的整数 xi 和 yi —— 平面上点 Ai 的坐标(−109≤xi,yi≤109)。最后一行包含一个长度为 (n−2) 的字符串 s,其字符仅由 "L" 和 "R" 组成。保证所有点互不相同,且任意三点不共线。
输出格式
If the satisfying permutation doesn't exists, print −1. In the other case, print n numbers p1,p2,…,pn — the permutation which was found (1≤pi≤n and all p1,p2,…,pn are different). If there exists more than one solution, you can find any.
如果满足条件的排列不存在,则输出 −1。否则,输出 n 个数 p1,p2,…,pn —— 所找到的排列(满足 1≤pi≤n,且 p1,p2,…,pn 互不相同)。若存在多个解,输出任意一个即可。
输入输出样例
输入#1
3 1 1 3 1 1 3 L
输出#1
1 2 3
输入#2
6 1 0 0 1 0 2 -1 0 -1 -1 2 1 RLLR
输出#2
6 1 3 4 2 5
说明/提示
This is the picture with the polygonal line from the 1 test:

As we see, this polygonal line is non-self-intersecting and winding, because the turn in point 2 is left.
This is the picture with the polygonal line from the 2 test:

这是第 1 个测试用例中的折线图:

如图所示,该折线是非自交且呈螺旋状的,因为在点 2 处发生了向左的转向。
这是第 2 个测试用例中的折线图:

输入解题思路,AI测评打分。不知道怎么写?