前言
作为本队的计算几何选手和翻译,为了找到学校训练题目中的计算几何题目,特意通过本专栏对学校训练题进行翻译。
SDKD 2021 Summer Training Series A 2nd Round
2019-2020 ICPC Northwestern European Regional Programming Contest (NWERC 2019)
A - Average Rank
在一个比赛中,每周完成的人可以得到一个点数,在每周的末尾,会对每个人的到的点数进行排名。每个人的排名为分数大于他的人数$+1$ , 如果两个人得到的点数相同那么他们的名次相同。
一共有n名参赛选手,比赛进行w周,每周给你一个选手的得分列表,你的任务是计算n名选手在这w周的平均名次。
输入
第一行n,w,分别表示人数和周数。
接下来w行,第 $i$ 行开头为 $k$,接下来k个数字$c_1,…c_k$表示$c_1,…,c_k$名选手在第 $i$ 周得到一分。
所有选手的总共得分不超过 $1 million$。
输出
$n$行,第$i$行表示第$i$名选手的平均名次。
B - Balanced Cut
给你一棵 $n$ 个结点的平衡二叉搜索树,该树具有如下性质:
- 左右子树深度之差不超过1。
- 结点的值比左子树中所有结点的值都大,比右子树所有结点的值都小。
现在让你删除结点至只剩 $k$ 个结点,当你删除结点时,所有该节点的子孙结点将被删除。
先让你完成这个操作,使剩余结点的中序遍历字典序最小。
输入
$n,k$ 表示有$n$个结点,要求剩余$k$个结点。
接下来 $n$ 行,第$i$行为 $p_i$ ,表示值为 $i$ 的结点的父亲的值为$p_i$, $p_i$ 为 $-1$ 表示为根节点。
输出
一个字符串,第 $i$ 位为$0$表示删除,为 $1$ 表示保留。
D - Disposable Switches
给一个 $n$ 个结点,$m$ 条路径的无向图,表示一个网络。每根传输时间为 $l/v + c$ , $l$ 为电缆的长度,$v$ 为传输速率,$c$ 为常量,$v$ 和 $c$ 未知 ,只知道$v > 0$ , $c >= 0$ ,当一个数据传送到一个结点时,他会选择路径耗时最短的结点进行转发,求无论 $v$,$c$ 为何值时,从$1$发送数据到$n$,有哪些结点是永远不会被转发到的。
输入
$n$,$m$ ,表示有 $n$ 个结点,$m$ 条路径。接下来 $m$ 行,每行有三个数 $a$ , $b$ , $l$ ,表示 $a$ 到 $b$ 之间的电缆长度为 $l$。
无重边,自环。图保证联通。
输出
第一行为一个 $k$ ,第二行有$k$个数,表示有$k$ 个结点不会被转发到。输出按升序排列。
SDKD 2021 Autumn Training Series B 1st Round
2018 German Collegiate Programming Contest (GCPC 18)
A - Attack on Alpha-Zet
给你一个二维网格平面,每格是一个 $1 \times 1$ 的单元格,每个单元格至少有一个和他相邻的单元格,单元格两两之间存在路径,并且不存在环。在这个二维平面中依次访问 $n$ 个点,求最少走过的单元格。
输入
第一行为 $h,w (2\leq h,w\leq 1000)$ 。表示迷宫的高和宽。
接下来 $h+1$ 行用$ASCII$表示一个迷宫,每行有$2 \cdot w+1$ 个字符。规则如下:
- 奇数行表示一个竖墙或者空格。偶数行表示一个横墙或者空格。
- 第一行为最北边的墙,只由横线构成,接下来的行都表示单元格。
- 单元格都在偶数列,左右为竖墙,如果没有竖墙则用空格代替。
接下来一行是一个数字 $m$ 。
接下来 $m$ 行,第 $i$ 行表示第 $i$ 要到达的点。每个坐标可能出现多次。$(1,1)$ 为左上角的点 $(h,w)$ 为右下角的点。
保证迷宫是封闭的,且两个点之间只有一条路径。
输出
一个数字,表示要走过的单元格。
B - Battle Royale
给你个蓝色圆,和一个红色圆 。问从$A$ 走到 $B$ 最短路径。
输入
$a$ 点坐标,$b$ 点坐标,蓝圆圆心坐标和半径,红圆坐标与半径。
$a$, $b$ 点保证在蓝圆内,红圆外。
输出
最短路径,误差不超过 $10^{-7}$ 。
C - Coolest Ski Route
给一个有向图,让你求一条权值最大的路径。
输入
$n,m$ 表示有 $n$ $(2 \leq n \leq 1000) $个点 , $m$ $(1 \leq m \leq 5000)$条边。
接下来 $m$ 行,每行分别为 $s,t,c(1\leq s,t \leq n,1 \leq c \leq 100)$ ,分别表示起点终点和权值。
输入保证没有回路。
输出
一个整数,表示最长路径。
D - Down the Pyramid
一个金子塔形状的图案,相邻的两个单元格相加为上层单元格数值,现告诉你 $n$ 层的序列,让你求 $n+1$ 层有几种可能。
输入
$n(1 \leq n \leq 10^6)$
$n$ 个数表示这个序列。
输出
一个数字,表示下一行有几种可能。
E - Expired License
给你 $a,b$ 问你能否找到两个素数$p,q$,使得 $\frac{p}{q} = \frac{a}{b}$。
输入
$n(1 \leq n \leq10^5)$
接下来 $n$ 行,每行有一个$a,b(0 < a,b < 100)$ 。小数点后最多五位小数。
输出
满足条件的 $p,q$,如果不存在输出$impossible$ ,如果有多组解,输出 $p+q$ 最小的情况。
F - Fighting Monsters
两个怪物互相攻击,,每个怪物有一个血量,当怪物 $A$ 攻击怪物 $B$ 时,会对$B$造成$A$血量的伤害。
攻击过程如下图所示:
现在给你 $n$ 个怪物,问你能不能找到两个怪物,互相攻击使其中一个血量只剩下$1$点。
输入
$n(2 \leq n \leq 10^5)$
第二行为$n$个数,表示$n$个怪物的血量。
输出
两个怪物的下表$i,j$,如果不存在输出$impossible$。如果存在多个,输出任意。