海妖沙龙

题目链接:YBT2023寒假Day11 A

题目大意

平面上有 n 个点,然后对于一个排列,如果按顺序走对于的点,会形成若干个线段组成的路径,然后你从前一个线段走到下一个线段端点时候,你需要左转或右转。
然后告诉你走的左转右转序列,要你找一个排列,使得路径两两不交,而且是给出的左转右转序列。
保证有解。

思路

考虑第一条边要怎么选。
看到线段不能相交,而且我们要尽量让下一条边拐向你走的方向。
那如果你选的线段在凸包上,那我们是不是有一个方向可以使得其他点都在你这条边的一测,而且我们可以通过改边的方向,使得拐到他们的方向改变。
那这样的一个好处就是你就不需要管这个边和下一个边的要求,而且这样后面的线段一定不会跟你相交。

那显然我们一直进行下去即可。
那一开始我们选最下最左的一个点,然后每次极角排序即可。

代码

#include<cstdio>
#define ll long longusing namespace std;const int N = 5050;
struct dian {ll x, y;
}a[N];
int n, use[N], ans[N];
char S[N];dian operator -(dian x, dian y) {return (dian){x.x - y.x, x.y - y.y};
}
ll operator *(dian x, dian y) {return x.x * y.y - x.y * y.x;
}int main() {freopen("route.in", "r", stdin);freopen("route.out", "w", stdout);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%lld %lld", &a[i].x, &a[i].y);}scanf("%s", S + 1);int s = 1;for (int i = 2; i <= n; i++)if ((a[i].x < a[s].x) || (a[i].x == a[s].x && a[i].y < a[s].y)) s = i;use[s] = 1;for (int i = 2; i <= n; i++) {int t = 0;for (int j = 1; j <= n; j++)if (!use[j]) {if (!t || ((S[i - 1] == 'R') == ((a[j] - a[s]) * (a[t] - a[s]) < 0))) t = j;}use[t] = i; s = t;}for (int i = 1; i <= n; i++) ans[use[i]] = i;for (int i = 1; i <= n; i++) printf("%d ", ans[i]);return 0;
}

【YBT2023寒假Day11 A】海妖沙龙(计算几何)相关推荐

  1. 【YBT2023寒假Day11 B】催眠大师(费用流)

    催眠大师 题目链接:YBT2023寒假Day11 B 题目大意 有一个 n*n 的棋盘,有一些位置有障碍. 然后定义棋盘上两个位置能相互攻击当且仅当在同一行或同一列,且之间的所有位置都没有障碍. 多次 ...

  2. 【YBT2023寒假Day10 B】随机游走(记忆化搜索)

    随机游走 题目链接:YBT2023寒假Day10 B 题目大意 有 n 个点排成环,你一开始在 1 号点,每次可以等概率选择左边跳两格,左边跳一格,右边跳一格,右边跳两格. 走到一个走过的点就停止. ...

  3. 【YBT2023寒假Day3 C】樱桃莓莓(凸包)(线段树)

    樱桃莓莓 题目链接:YBT2023寒假Day3 C 题目大意 给你一棵有根数,点有 a,b 两种权值. 然后一个点的分数是它以及它所有祖先的 a 权值和的绝对值乘上 b 权值和的绝对值. 然后有两种操 ...

  4. 【YBT2023寒假Day9 B】买棉花糖(DP)(分治)

    买棉花糖 题目链接:YBT2023寒假Day9 B 题目大意 有 n 个商店,每个商店有 ci 个物品,原价是 ai,你在一个商店买的物品越多,下一个买的就越少,每次减少 di 块钱. 然后有 q 次 ...

  5. 【YBT2023寒假Day1 B】不跪模样(树链剖分)(线段树)

    不跪模样 题目链接:YBT2023寒假Day1 B 题目大意 给你一棵有根数,点有点权,两种操作: 对于所有 x 子树内与 x 距离不超过 2 的点,将其点权加 v. 询问 x 子树中,满足 i< ...

  6. 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)

    樱桃莓莓 题目链接:YBT2023寒假Day4 C 题目大意 有一个黑盒操作满足交换律和结合律,有 n 个数,q 次询问,每次选 m 个下标,你要计算所有不包含那 m 个下标的数进行黑盒操作之后的结果 ...

  7. 【YBT2023寒假Day10 C】娄居吉勾(点分树)

    娄居吉勾 题目链接:YBT2023寒假Day10 C 题目大意 有一个 n 个点 m 条边的无向连通图,每个点至多在 k 个简单环上. 然后有 q 个操作,标记一个没有标记过的点,或者给你一个点求它得 ...

  8. 【YBT2023寒假Day3 A】千与千寻(期望DP)(高斯消元)

    千与千寻 题目链接:YBT2023寒假Day3 A 题目大意 一个 n*m 的平面,你要从 (0,0) 走到 (x,y),你等概率的向上或向右走,然后当你走到 (n-1,i) 再往右走,就是 (0,i ...

  9. 【YBT2023寒假Day13 C】百里守约(Boruvka算法)(扫描线)(线段树)

    百里守约 题目链接:YBT2023寒假Day13 C 题目大意 有一个 n*n 的矩阵,一开始里面都是 0,多次操作,每次把一个子矩阵里面的值都增加每次给出的 w. 然后全部操作完之后构造一个 n 个 ...

最新文章

  1. JQ学习(三)-ajax
  2. delphi 调用dll 整形返回值_VS2015 编写C++ DLL库及C++、 C#、python 调用
  3. C语言,去你的策略模式!
  4. 区块链人才缺口明年将达顶峰,核心开发者年入百万很正常
  5. JAVA结课_一点心情,写java结课考试之前
  6. 全球链界科技发展大会_科技界女性占五席
  7. Selenium+requests出现窗口不能跳转的情况
  8. linux中几个热键
  9. Android ImageButton使用详解(系列教程四)
  10. CDA LEVELII考试内容记录学习--目录篇
  11. shader篇-处理复杂光照
  12. Android Browser默认主页网址(验证于KK,L,M,N,O)
  13. cmd中为什么看不到python安装成功_cmd中运行python怎么切换目录? 怎么查看python中已安装的包...
  14. android和手环传输数据,智能手环工作原理_智能手环是如何进行数据传输的 - 全文...
  15. 第一、二、三代半导体的区别在哪里?
  16. python里randint是什么意思_Python中random.randint方法(精选)
  17. 【转】我们为什么要使用 Markdown
  18. SVD分解的推导,理解SVD分解及矩阵奇异值的几何意义
  19. 记录2020这个不平凡的农历新年
  20. 观其关键字排名查询工具_海口seo关键字优化工具排名

热门文章

  1. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
  2. svg android怎么填充颜色,android svg 使用方法及修改颜色
  3. C语言基础——编译器工作原理
  4. php sentry,sentry使用
  5. Linux下QT编程之MQTT实战
  6. bootloaders
  7. 一文搞定Java IO流√
  8. 【我所認知的BIOS】—Super IO
  9. foreman源NO_PUBKEY 6F8600B9563278F6 1
  10. 修改浏览器默认的滚动条样式