Codeforces 55 题目分析

本文将对 Codeforces 55 (Beta Round 51) 进行分析。

A

题目描述:

一个虫子位于绕城一圈的 n 片树叶中的一片上,在第 k 分钟,虫子会跳过 k1 片树叶并在脚下的树叶上做一个记号。你的任务是判断该虫子是否将 n 片树叶都做了记号。

解题思路:
直接模拟即可。
代码:

#include <bits/stdc++.h>
using namespace std;
int n, cnt = 0;
bool vis[1010];
const int inf = 1000000;
int main() {
cin >> n;
int pos = 0;
for (int i = 1; i <= inf; i++) {
if (!vis[pos]) cnt++;
vis[pos] = 1;
pos = (pos + i - 1) % n;
}
puts((cnt == n) ? "YES" : "NO");
return 0;
}

B

题目描述:

现有 4 个整数(均小于等于 1000),并给出三个运算符(均为 +*)。要求每次取出不一定相邻的两个数,并依次使用给出的运算符对这两个数进行运算,并将结果当做一个新数如此操作,直到只剩下一个数为止。 编程求出最后剩下数的最小值。

解题思路:
暴搜求最小值。复杂度能过。
代码略。

C

题目描述:

Volodya 和 Vlad 在下一盘棋,在棋盘的 n×m1n,m100) 格中有 k (0k100) 个棋子。
每轮 Volodya 将一个棋子移动到相邻的单元格中。如果棋子位于棋盘边界,Volodya 可以将其移出棋盘并获胜。在Volodya 移动之后,Vlad 会在棋盘边界上放上长度为 1 的挡板(图中黑线),这样下一轮中 Volodya 就不能再通过这条边线将棋子移到棋盘外了。
问:Volodya 会赢得这盘棋吗?我们假设两位棋手都采用了最优策略。

解题思路:
注意到,如果棋子在边上,则需要将挡板放在靠近边缘的位置。
此时,棋子可以侧向移动,挡边也可以一直挡。直到棋子到达角落。此时由于存在两条相邻的边,所以不管堵那条,棋子都能从另一条出去。于是考虑在棋子移动到边缘的过程中,先将四个角堵上。
即得:判断棋子到边缘的距离。大于 4 则必然失败。
代码略。

D

题目描述:

Volodya 认为一个数字 x 是美丽的,当且仅当对于 x 的每一个非零位上的数 y,都有 yx
你需要帮助他算出在区间 [l,r] 中有多少个数是美丽的。

解题思路:一眼数位 DP。然后就不会做了。
由于数字除以 lcm 不改变整除特性,因此将所有数字整除 lcm(1,...,9)。
然后考虑离散化质因数防止 MLE。记得开 long long。
以上纯口胡。

E

题目描述:

给定一个凸多边形和一些点,问你这些点被多少个三角形所包含。

解题思路:
用总数减去不包含的数量。同一平面内任选三个点的方案数为 C3n,然后观察发现若一个点不在三角形内,则该三角形的一条边分隔该点与不为这条边的顶点的三角形顶点。于是可切。
也是纯口胡。

posted @   cwkapn  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示