非官方题解 | COCR CUP 2025 思路题解
COCR Cup比赛链接
本人先讲片面题目思路 我是蒟蒻 这里就只讲T1~T4
顺便参加一下“我师焉”
题目编号 题目名称 题目难度 T1 Easy 入门 T2 Word 普及/提高- T3 Force 普及+/提高 T4 Stone 普及+/提高 T5 Farm 省选/NOI- T6 Run 省选/NOI- T7 Zombie NOI/NOI+/CTSC T8 Square NOI/NOI+/CTSC
T1 EASY
题目大意
一个Rt△ABC∠B=90∘,∠A=2∠C,AB=N求ACRt\triangle ABC \angle B=90 ^\circ ,\angle A=2\angle C,AB=N求ACRt△ABC∠B=90∘,∠A=2∠C,AB=N求AC 且保留2位小数
题解思路
我们可以先求出∠A和∠C的度数为60∘和30∘,而∠B的度数为90∘\angle A 和 \angle C的度数为60^\circ 和30^\circ,而\angle B的度数为90^\circ∠A和∠C的度数为60∘和30∘,而∠B的度数为90∘
再以特殊角的线段比例1:3:2算出斜边(AC)为2AB所以AC=2N再以特殊角的线段比例1: \sqrt{3} :2 算出斜边(AC)为2AB 所以AC=2N再以特殊角的线段比例1:3 :2算出斜边(AC)为2AB所以AC=2N
如果你不懂特殊角比例也没关系 我复制一份到右边就成为了一个等边三角形
实例代码
T2 WORD
题目大意
这是一个模拟简化版Word编辑器的题目。你需要处理6种操作来维护一个文本字符串:
6种操作:
* I x - 在光标处插入字符x
* A - 全选整个文档
* C - 复制选中的内容到剪贴板
* V - 在光标处粘贴剪贴板内容
* P i - 移动光标到第i个字符后
* TP i - 选择第i个字符
关键状态:
* 文档内容:当前的文本字符串
* 光标位置:当前插入位置(0到文档长度)
* 剪贴板:临时存储复制的内容
* 选择状态:全选状态或选中单个字符状态
特殊规则:
* 全选后执行键入或粘贴会替换整个文档
* 双击选择字符后执行键入会替换该字符
* 位置超出时自动调整到边界
* 字符位置从1开始计数
下面我给出操作思路代码:
变量名意思
C操作
V操作
P操作
TP操作
I操作
A操作
T3 FORCE
题目大意
题目分析
力的合成计算公式
1. 力的分解公式
将每个力分解为水平方向(x轴)和垂直方向(y轴)的分量:
水平分力:
Fix=fi⋅cos(θi)F_{ix} = f_i \cdot \cos(\theta_i) Fix =fi ⋅cos(θi )
垂直分力:
Fiy=fi⋅sin(θi)F_{iy} = f_i \cdot \sin(\theta_i) Fiy =fi ⋅sin(θi )
其中:
* fif_ifi 为第 iii 个力的大小
* θi=xi⋅π180\theta_i = x_i \cdot \frac{\pi}{180}θi =xi ⋅180π 为第 iii 个力的弧度值
* π≈3.1415926535\pi \approx 3.1415926535π≈3.1415926535
2. 合力计算公式
总水平合力:
Fx=∑i=1NFix=∑i=1Nfi⋅cos(θi)F_x = \sum_{i=1}^{N} F_{ix} = \sum_{i=1}^{N} f_i \cdot \cos(\theta_i) Fx =i=1∑N Fix =i=1∑N fi ⋅cos(θi )
总垂直合力:
Fy=∑i=1NFiy=∑i=1Nfi⋅sin(θi)F_y = \sum_{i=1}^{N} F_{iy} = \sum_{i=1}^{N} f_i \cdot \sin(\theta_i) Fy =i=1∑N Fiy =i=1∑N fi ⋅sin(θi )
3. 合力大小公式
合力大小:
F=Fx2+Fy2F = \sqrt{F_x^2 + F_y^2} F=Fx2 +Fy2
4. 合力方向公式
合力与水平面的夹角(弧度):
θ=arctan2(Fy,Fx)\theta = \arctan2(F_y, F_x) θ=arctan2(Fy ,Fx )
转换为角度:
α=θ⋅180π\alpha = \theta \cdot \frac{180}{\pi} α=θ⋅π180
5. 角度处理
角度规范化:
* 如果 α<0\alpha < 0α<0,则 α=α+360\alpha = \alpha + 360α=α+360
* 最终结果向下取整:⌊α⌋\lfloor \alpha \rfloor⌊α⌋
6. 最终输出
输出两个整数:
* 合力大小 FFF 向下取整:⌊F⌋\lfloor F \rfloor⌊F⌋
* 合力角度 α\alphaα 向下取整:⌊α⌋\lfloor \alpha \rfloor⌊α⌋
注: 使用 atan2(y, x) 函数可以正确处理所有象限的角度计算。
这就是思路 由于作者没能写出来具体代码 其实在上课没时间写 我下次重新写一遍再给代码
T4 STONE
NIM游戏分析
题目分析
1. 游戏规则
* 有N堆石子,玩家轮流从任意一堆中取走任意数量的石子(至少取1个)
* 取走最后石子的人获胜
* FM是先手
2. 必胜条件(BOUTON定理)
对于Nim游戏,先手必胜的充要条件是:所有堆石子数量的异或和不为0。
即:如果 a1⊕a2⊕...⊕aN≠0a_1 \oplus a_2 \oplus ... \oplus a_N \neq 0a1 ⊕a2 ⊕...⊕aN =0,则先手必胜(输出"Yes")
3. 必败情况的处理
如果异或和为0(即 a1⊕a2⊕...⊕aN=0a_1 \oplus a_2 \oplus ... \oplus a_N = 0a1 ⊕a2 ⊕...⊕aN =0),则先手必败(输出"No")。
此时需要添加一堆数量为 aN+1a_{N+1}aN+1 的石子,使得新的异或和不为0:
a1⊕a2⊕...⊕aN⊕aN+1≠0a_1 \oplus a_2 \oplus ... \oplus a_N \oplus a_{N+1} \neq 0 a1 ⊕a2 ⊕...⊕aN ⊕aN+1 =0
4. 最小添加数量的计算
设当前异或和为 S=a1⊕a2⊕...⊕aN=0S = a_1 \oplus a_2 \oplus ... \oplus a_N = 0S=a1 ⊕a2 ⊕...⊕aN =0
要使添加后异或和不为0,需要:
S⊕aN+1≠0⇒aN+1≠0S \oplus a_{N+1} \neq 0 \Rightarrow a_{N+1} \neq 0 S⊕aN+1 =0⇒aN+1 =0
但题目要求的是最少个数,所以:
* 如果原始异或和 S=0S = 0S=0,那么最小的 aN+1a_{N+1}aN+1 是 1
* 因为 0⊕1=1≠00 \oplus 1 = 1 \neq 00⊕1=1=0,且1是最小的正整数
5. 特殊情况考虑
为什么不能添加0个石子?
* 题目要求"添加一堆石子",所以数量必须 ≥1
* 即使允许添加0个,0⊕0=00 \oplus 0 = 00⊕0=0,仍然必败
说白了 我白说了 你看了这么多其实就是进行异或操作 就能判断多次异或的数字是否为0不是0就输出Yes反之输出No
代码解析: