Codeforces

emmmmmmm蒟蒻第一次参加codeforces, 当然选择的是div2啦.
以下为A题和B题思路(搞不懂我就写两题花了一个多小时还在房间里排40名?)

A

题面

给定n座塔,每座塔有h层, 在x层到y层间可以走到相邻的两座塔楼.
相邻两层间行走需要1min, 相邻两座塔楼间行走需要1min.
有k组询问, 每组给定两个位置(a塔, b层)(c塔, d层).
求从第一个位置到第二个位置最少要多少分钟.

思路

挺水的一道题, 可我一开始居然觉得难跑去写B?
其实就是模拟, 但是有好几种情况:
1.在同一座塔楼,
time = abs(b-d)
2.在不同塔楼, 分两种:
1.不用绕路 d<=y&&b>=x || d>=x&&b<=y
time = abs(a-c)+abs(b-d)
2.绕路 两个位置都在通道同一侧(上方或下方)
即 b<x&&d<x || b>y&&d>y
time = abs(a-c)+abs(min(b到x, b到y))+abs(min(d到x, d到y))
输出即可

B

题面

老师在抓捣蛋的学生, 每抓到一个就在他的徽章上打个洞
现有nn个学生, 且每个学生会卖一个确定不变的队友(永远只卖一个相同队♂友)
请你输出nn个数, 每个数表示若第一个抓到了第$n_i$个学生, 则第一个拿到两个洞的人是谁.

思路

模拟+一点点图论
枚举1到n号同学作为第一个人, 模拟过程, 并给每一个人加一个计数器,
若计数器=2 ,输出即可, 到下一个循环.

Author: Odeinjul
Link: http://odeinjul.ooo/cf-503-d2.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.