用户工具

站点工具


2020-2021:teams:mian:icpc_regionals:2016-2017_acm-icpc_neerc_central_subregional_contest

2016-2017 ACM-ICPC, NEERC, Central Subregional Contest

Results

Summary

  • Solved 10 out of 11 problems
  • Rank 1/34 in official records
  • Solved 11 out of 11 afterwards

Virtual Participation

# = Penalty A B C D E F G H I J K
38/441 10 1189 +1 00:07 +1 01:29 +5 02:47 + 00:16 +2 00:41 +2 02:28 +1 00:11 +2 00:31 +1 03:16 +4 01:43 -3

Submit Distribution in Members

Solved A B C D E F G H I J K
Pantw O
Withinlover
Gary

(√ for solved during VP, ○ for after VP, - for tried but not solved)


Solutions

A: Fried Fish

  • Solved by Pantw

题意

$n$ 张饼,每张饼有两面,一个锅一次最多能煎 $k$ 张饼的单面,问最少几分钟煎完所有饼。

$1\le n, k \le 500$

解法

$\mathrm{Ans}:=\lfloor\cfrac{2n}{k}\rfloor+\left[2n\not\equiv 0\pmod{k}\right]$

$\uparrow$ 然而这样就 WA 了,你需要特判 $n < k$ 的情况,此时答案是 2。

B: Hanoi tower

  • Formula by Withinlover
  • Code by Pantw

题意

给一个解 Hanoi 塔问题的程序,问经过多少步,三根杆上的圆盘数第一次相等。

圆盘总数 $n$,保证 $n\equiv 0\pmod 3$。

$1\le n\le 300$。

解法

$\mathrm{Ans}=\begin{cases}2^{\frac{2n}{3}-1}+2^{\frac{n}{3}-1}-1,& n\equiv 0\pmod 6\\2^{\frac{2n}{3}-1}+2^{\frac{n}{3}}-2,& n\equiv 3\pmod 6\end{cases}$

Code

inn = open("input.txt")
ouu = open("output.txt", "w")
n = int(inn.read())
if n % 6 == 0:
    ans = 2 ** (n * 2 // 3 - 1) + 2 ** (n // 3 - 1) - 1
else:
    ans = 2 ** (n * 2 // 3 - 1) + 2 ** (n // 3) - 2
ouu.write(str(int(ans)))

C: Desktop

  • Solved by Pantw

题意

$h\times w$ 的方格矩阵上放置 $2\times 2$ 的图标,后放的图标显示在先放的上面,覆盖掉先放的格子,要求每个图标至少有两个是可见的,问最多能放多少图标。要求输出方案。

$1\le h, w\le 500$

解法

直接暴力铺开。

图如:

qq图片20200510223135.jpg

D: Weather Station

  • Solved by Pantw

题意

给一列方向记录,一共有八种方向:N S W E SE SW NE NW,问有多少种可能的解读方式。

解法

简单 DP 题,不说了。

E: Cupcakes

  • Solved by Withinlover

题意

$n$ 个人吃蛋糕,总共有 $K$ 块,用 $a_i$ 表示第i个人一次性最多可以吃下的蛋糕数量。也就是说,第 $i$ 个人最少吃 $1$ 块,最多吃 $a_i$ 块。

$a_i$ 最大的人十分贪婪,每次都会吃满 $a_i$ 块。

从第一个人开始,以循环队列的形式轮流吃蛋糕,第一个人吃完后返回队尾。且最后无蛋糕可吃的人将负责收拾残局。问是否存在一种方案使最贪婪的人收拾残局。

$N \leq 2e5, K \leq 1e8,a_i \leq 1e9$

解法

分别算出,每个人都吃 $1$ 块和吃 $a_i$ 块时的 $Min$ 和 $Max$,只要轮到最贪婪的人时 $Min \leq K\leq Max$ 便有解。

记 $T = \max\{a_i\} + n - 1$,即每一次循环最少吃掉的蛋糕数量,一开始觉得暴力模拟会 $TLE$,想用 $(K - i)/T$ 直接算出需要的循环数。还是有些细节的,写完后发现莫名的 $WA$,改成一趟一趟枚举直接就 $A$ 掉了。

仔细想想这题复杂度上限才 $1e8$,浪费时间了。

F: Vitamins

  • Solved by Withinlover

题意

(有没有人玩过一款叫做平衡球的游戏)

这世上一共有三种球,分别对应纸球,木球,铁球。三者重量不同。

现在给你 $n$ 颗球,编号为 $1,2,\dots,n$ ,同时给出 $m$ 个大小关系。用$>,<,=$连接。要求判断出每个球的种类,对于条件不足无法判断的球,输出 “$?$”。

$n\leq 1000$

题解

思路和这个题很像

用并查集把等于号合并,然后对小于号建图。

如果一个集合同时有入度有出度。则为木球。

木球所到达的集合为铁球

到达木球的集合为纸球

剩下的全部无法判断

(这个题的数据范围挺小的乱搞都能过)

解法

G: Sphenic numbers

  • Solved by Pantw

题意

问一个数 $n$ 是否恰好是三个不同质数的乘积。

$30\le n\le 10467397$

解法

直接暴力分解。水题,不说了。

H: Non-random numbers

  • Solved by Pantw

题意

指定一个位数 $n$,问有多少 $n$ 位 10 进制数满足本身无前导零,且从左至右第 $i$ 位不是 $i$。

$1\le n\le 100$

解法

容易发现 $n$ 超过 $9$ 时,后面的位都没有限制,直接在后面输出 $0$ 就行了,但是还是可以直接用 python 大力莽。这边由于不熟 py 吃了两发罚时。

I: Land Division

  • Solved by Gary

题意

给出一个凸$n$边形的$n$个点,选择图形上两点构成的线段使得该线段将原图形分为凸$m$边形和凸$k$变形,求线段长度的最小值,不存在输出$-1$,$n$个点按顺时针输入

$1\le n \le1000$

解法

易发现当$n+2 \le m+k \le n+4 $时有解

当$n+2=m+k$时,应选择点到点的线段,依次遍历$n$个点

对于点$P_i$,记$Q_i=P_{i+k-1\pmod n},S_i=P_{i-k+n+1\pmod n}$

则$\mathrm{ans}=\min\{\lvert\overrightarrow{P_iQ_i}\rvert\,\lvert\overrightarrow{P_iS_i}\rvert\}$

当$n+3=m+k$时,应选择点到边的线段,依次遍历$n$个点

对于点$P_i$,记$Q_i=P_{i+k-1\pmod n},Q^{'}_i=P_{i+k+2\pmod n},S_i=P_{i-k+n+1\pmod n},S^{'}_i=P_{i-k+n+2\pmod n}$

则$\mathrm{ans}=\min\{distance(P_i,\overrightarrow{Q_iQ^{'}_i}),distance (P_i,\overrightarrow{S_iS^{'}_i})\}$

当$n+4=m+k$时,应选择边到边的线段,可转化为两边上4个端点到对应边的距离,同上

J: Architect of Your Own Fortune

  • Idea by Pantw & Gary
  • Code & Debug by Gary

题意

给出$n,m$两组六位数,某一对数$A_i(\overline{a_1a_2a_3a_4a_5a_6}),B_j(\overline{b_1b_2b_3b_4b_5b_6})$是合法的当且仅当$a_1+a_2+a_3=b_4+b_5+b_6$

或$b_1+b_2+b_3=a_4+a_5+a_6$,求最大合法对数并输出方案

$1\le n,m \le 100$

解法

二分图匹配裸题,建图

$S\xrightarrow{\rm{flow}=INF}S_1\quad S_1\xrightarrow{\rm{flow}=1}A_i\quad A_i\xrightarrow{\rm{flow}=1}B_j\quad B_j\xrightarrow{\rm{flow}=1}T$

跑最大流之后判断$A_i\to B_j$中$\mathrm{flow}=0$的边为选中的数对并输出

K: Polymorphic code

  • Idea by Pantw & Withinlover
  • Solved in Practice by Pantw

题意

指定一系列汇编代码加花规则,给出加花后的代码,要求缩回去,如果有多种缩减方案那么取结果最短的。

解法

一群人证了半天发现好像多解不会导致答案长度变化,因为两个可能冲突的 schema 都是 1 换 5。

然后就直接拿个东西存汇编程序,然后从前往后扫,扫到符合模式的就缩,缩完之后指针倒退 7 个单位。

(这个题最后写了 7.5 KB)

吐槽一下,STL 链表真难用。


Timeline

Time Action
-35 CF 炸了,502
-27 Vjudge 上找题
-10 找到了
-6 Vjudge 准备开
-5 CF 好了
-4 切回 CF
0 Start
1 P 看到 A 像个签到,先猜结论
3 P 上
6 A 提交 WA,开始想特例
7 P 过了 A,看到榜上很多过了 G,开始读写 G
9 G 提交,WA,换 W 写 E
11 P 读题漏条件了,简单改一下,过了 G,W 继续写 E
13 P 看到 D 是个水题,切上来写,W 先下
16 P 过了 D,W 觉得自己 E 能被卡,先不上
17 G 说他会了 C,想上去写会 C,P 读 J
19 P 帮 W 跟榜读 H
21 P 和 W 讨论出了 H,分别去读 J 和 B
24 P 看出 J 是裸的二分图最大匹配,问有没有人有最大匹配或者最大流板子
24 G 说自己 C 有点问题,先下,P 上去写 H
27 P 用 py 写了 H,提交忘写文件,RE
30 H 题 WA13
31 P 查了错发现是 py 里整除要写 a // b 而不是 a / b
32 P 过了 H,W 上去写 E
33 G 说自己 C 有问题,P 先给 G 讲 J
36 E 题漏文件,WA1,P 讲完了 J
37 E 题 WA2
38 P 和 G 讨论 F
41 W 过了 E,G 上去写 J,W 下来想 B
42 P 读 C,G 给 P 讲 C 题意
x P 和 G 讨论 C
48 P 去读 K
54 P 和 W 讨论 B
58 P 和 W 讨论 F
59 G 写完 J,没过样例
61 P W G 三个人讨论比赛环境
63 W 看了 I
65 W 和 P 讨论 I
69 G 下来查错,P 上去写 B 的暴力
74 P 打出一堆数据,G 上去改 J
77 J 忘写文件,WA1,第二发 TLE1
78 P 和 W 讨论 B,J 题 WA2
82 G 下来查错 J
86 P 上去写 B
89 P 过了 B
90 P 想 C
93 G 上去改 J,WA2,P 继续想 C
96 P 帮 G 看 J 题意
98 G 看出错,切上去改 J,P 下来
103 G 过了 J
104 三个人继续讨论 C,P 上去写 C
112 G 和 W 讨论 F
115 P 给 G 和 W 讲 K
118 G 和 W 讨论 I
126 P 也跟 G 和 W 讨论 I
130 C 题提交漏文件,改了之后 WA3,P 下来查错,W 上去写 F
137 C 改两行提交,WA3
144 W 交了 F,漏文件 WA1,改了之后 WA2,下来查错,P 上去写 C
147 W 切上去改 F,P 先下
148 W 过了 F,P 上去改 C
153 三个人讨论 C
163 C 提交漏文件,改了 WA4
167 P 意识到顺序问题,set 改成 queue 过了 C
168 G 上去写 I,P 和 W 讨论 K
186 I 题 WA2,P 和 W 一直讨论 K
196 G 改过了 I,下来看 K,P 上去写 K 的读入
200 G 和 W 两个人一直讨论 K
202 (这边开始 P 电脑声音一直循环放歌 233333)
237 P 让 G 和 W 构造几个样例待会测试用
264 P 写完了 K
276 K 题调过了所有样例,提交 WA8
283 发现 K 题漏了前导 0,提交 RE82
285 W 说数组开小了,改了提交 TLE82
286 W 说可能用了 vector 被卡到 $\Theta(n^2)$
287 P 决定把 vector 换成 list
289 W 说匹配修改时应该倒退
298 P 发现 advance 不返回新迭代器
300 End
(14) K 题换成 list 之后条件写错,TLE1
(23) K 题条件又写错了,WA3
(27) K 题 RE1
(30) 发现还是条件写错了,改了之后过了 K

Reflections

  • 应该一开始听 W 的去写 list 实现,或者手动实现 list
  • 记得写文件操作
2020-2021/teams/mian/icpc_regionals/2016-2017_acm-icpc_neerc_central_subregional_contest.txt · 最后更改: 2020/05/12 00:33 由 gary