TopCoder SRM 473 题解

这次的题目难度很不均匀啊……


250pts:一个机器人在一个无限的平面上。有一系列指令:向前走一单位长度,左转或右转90度。如此一直自行下去,问是否存在R使得机器人距出发位置始终不超过R(即机器人的轨迹是否在某个半径确定的圆内)

很容易得出结论:如果按照指令模拟一遍之后,朝向和开始时不同,则存在。另外需注意如果模拟一遍后会回到初始位置,那么也是存在的。


500pts:有一个圆,圆周被均分成N份(0~N-1)。现在要画上M个点,第i个点(0~M-1)的位置为第P[i]=(A*i^2+B*i+C)%N份。如果P[i]上已经有了点那么就顺时针找到第一份没有点的区域。点画在区域的圆弧的中点。画完点与点两两连线,问构成多少直角三角形。N≤10^6。

由于是在圆上,直角三角形就一定过圆形。那么假设有X条线段过圆形,答案就是X*(N-2)。那么只要能够快速确定哪些区域中有点就能算出答案。用并查集维护从每个点开始的顺时针的第一个空位,画点的时候就将其父亲指向下一个节点。这样的复杂度是O(N)的。也可以用线段树或者树状数组维护一段已有的点的个数。


1000pts:

有N种颜色的车(国际象棋),每种Col_i个,放置在R×C的棋盘上。
如果有两个不同颜色的车同行或同列,且之间没有其他车,它们就会互相攻击。
求使得所有车不互相攻击的摆放方案数。
R,C≤30、N≤10。

因为有不少公式就直接贴图了。
TopCoder SRM 473 题解_第1张图片
TopCoder SRM 473 题解_第2张图片
TopCoder SRM 473 题解_第3张图片

你可能感兴趣的:(topcoder)