CF1158D.Winding polygonal line

省选/NOI-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Vasya has nn different points A1,A2,…AnA_1, A_2, \ldots A_n on the plane. No three of them lie on the same line He wants to place them in some order Ap1,Ap2,…,ApnA_{p_1}, A_{p_2}, \ldots, A_{p_n}, where p1,p2,…,pnp_1, p_2, \ldots, p_n — some permutation of integers from 11 to nn.

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−11 \leq i \leq n-1 he will draw oriented segment from point ApiA_{p_i} to point Api+1A_{p_{i+1}}. He wants to make this polygonal line satisfying 22 conditions:

  • it will be non-self-intersecting, so any 22 segments which are not neighbors don't have common points.
  • it will be winding.

Vasya has a string ss, consisting of (n−2)(n-2) symbols "L" or "R". Let's call an oriented polygonal line winding, if its ii-th turn left, if $s_i = $ "L" and right, if $s_i = $ "R". More formally: ii-th turn will be in point Api+1A_{p_{i+1}}, where oriented segment from point ApiA_{p_i} to point Api+1A_{p_{i+1}} changes to oriented segment from point Api+1A_{p_{i+1}} to point Api+2A_{p_{i+2}}. Let's define vectors v1→=ApiApi+1→\overrightarrow{v_1} = \overrightarrow{A_{p_i} A_{p_{i+1}}} and v2→=Api+1Api+2→\overrightarrow{v_2} = \overrightarrow{A_{p_{i+1}} A_{p_{i+2}}}. Then if in order to rotate the vector v1→\overrightarrow{v_1} by the smallest possible angle, so that its direction coincides with the direction of the vector v2→\overrightarrow{v_2} we need to make a turn counterclockwise, then we say that ii-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,…AnA_1, A_2, \ldots A_n on the plane and string ss. Find a permutation p1,p2,…,pnp_1, p_2, \ldots, p_n of the integers from 11 to nn, such that the polygonal line, drawn by Vasya satisfy two necessary conditions.

瓦西里在平面上有 nn 个互不相同的点 A1,A2,…,AnA_1, A_2, \ldots, A_n,且其中任意三点均不共线。他希望将这些点按某种顺序排列为 Ap1,Ap2,…,ApnA_{p_1}, A_{p_2}, \ldots, A_{p_n},其中 p1,p2,…,pnp_1, p_2, \ldots, p_n 是 11 到 nn 的一个排列。

完成排序后,他将按此顺序在这些点上绘制一条有向折线:对每个 1≤i≤n−11 \leq i \leq n-1,从点 ApiA_{p_i} 向点 Api+1A_{p_{i+1}} 绘制一条有向线段。他希望该折线满足以下两个条件:

  • 不自交:任意两条不相邻的线段没有公共点;
  • 具有指定的“卷绕性”(winding)。

瓦西里有一个长度为 (n−2)(n-2) 的字符串 ss,其每个字符均为 "L" 或 "R"。我们称一条有向折线是卷绕的,当且仅当它的第 ii 个转向为左转(若 $s_i = $ "L")或右转(若 $s_i = $ "R")。更准确地说:第 ii 个转向发生在点 Api+1A_{p_{i+1}} 处,即有向线段 ApiApi+1→\overrightarrow{A_{p_i} A_{p_{i+1}}} 变为有向线段 Api+1Api+2→\overrightarrow{A_{p_{i+1}} A_{p_{i+2}}} 的位置。定义向量 v1→=ApiApi+1→\overrightarrow{v_1} = \overrightarrow{A_{p_i} A_{p_{i+1}}} 和 v2→=Api+1Api+2→\overrightarrow{v_2} = \overrightarrow{A_{p_{i+1}} A_{p_{i+2}}}。若将向量 v1→\overrightarrow{v_1} 绕起点以最小角度旋转至与 v2→\overrightarrow{v_2} 同向时需逆时针旋转,则称第 ii 个转向为左转;否则为右转。为便于理解,请参看以下示意图中的转向示例:

此图中所有转向均为左转

此图中所有转向均为右转

现给定平面上点 A1,A2,…,AnA_1, A_2, \ldots, A_n 的坐标以及字符串 ss,请找出 11 到 nn 的一个排列 p1,p2,…,pnp_1, p_2, \ldots, p_n,使得瓦西里所绘制的折线满足上述两个必要条件。

输入格式

The first line contains one integer nn — the number of points (3≤n≤20003 \leq n \leq 2000). Next nn lines contains two integers xix_i and yiy_i, divided by space — coordinates of the point AiA_i on the plane (−109≤xi,yi≤109-10^9 \leq x_i, y_i \leq 10^9). The last line contains a string ss consisting of symbols "L" and "R" with length (n−2)(n-2). It is guaranteed that all points are different and no three points lie at the same line.

第一行包含一个整数 nn —— 点的数量(3≤n≤20003 \leq n \leq 2000)。接下来的 nn 行每行包含两个由空格分隔的整数 xix_i 和 yiy_i —— 平面上点 AiA_i 的坐标(−109≤xi,yi≤109-10^9 \leq x_i, y_i \leq 10^9)。最后一行包含一个长度为 (n−2)(n-2) 的字符串 ss,其字符仅由 "L" 和 "R" 组成。保证所有点互不相同,且任意三点不共线。

输出格式

If the satisfying permutation doesn't exists, print −1-1. In the other case, print nn numbers p1,p2,…,pnp_1, p_2, \ldots, p_n — the permutation which was found (1≤pi≤n1 \leq p_i \leq n and all p1,p2,…,pnp_1, p_2, \ldots, p_n are different). If there exists more than one solution, you can find any.

如果满足条件的排列不存在,则输出 −1-1。否则,输出 nn 个数 p1,p2,…,pnp_1, p_2, \ldots, p_n —— 所找到的排列(满足 1≤pi≤n1 \leq p_i \leq n,且 p1,p2,…,pnp_1, p_2, \ldots, p_n 互不相同)。若存在多个解,输出任意一个即可。

输入输出样例

  • 输入#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 11 test:

As we see, this polygonal line is non-self-intersecting and winding, because the turn in point 22 is left.

This is the picture with the polygonal line from the 22 test:

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

如图所示,该折线是非自交且呈螺旋状的,因为在点 22 处发生了向左的转向。

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

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

首页