[USACO3.2]纺车的轮子 Spinning Wheels 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:普及 分数:100 OI排行榜得分:16(0.1*分数+2*难度) 出题人: 描述 一架纺车有五个纺轮(也就是五个同心圆),这五个不透明的轮子边缘上都有一些缺口。这些缺口必须被迅速而准确地排列好。每个轮子都有一个起始标记(在0度),这样所有的轮子都可以在统一的已知位置开始转动。轮子按照角度变大的方向旋转(即0经过旋转到达1的位置),所以从起始位置开始,在一定的时间内,它们依次转过1度,2度等等(虽然这些轮子很可能不会同时转过这些角度)。 这是一个整数问题。轮子不会转过1.5度或23.51234123度这样的角度。例如,轮子可能在一秒钟内转过20到25度甚至30到40度(如果转得快的话)。 这个问题中的所有角度都限制在 0 <= 角度 <= 359 这个范围内。轮子转过 359 度后接下来就是 0 度。每个轮子都有一个确定的旋转速度,以秒作为单位。1 <= 速度 <= 180。 轮子
```cpp #include <iostream> #include <vector> using namespace std; // 定义轮子结构体,包含旋转速度和缺口信息 struct Wheel { int speed; vector<pair<int, int>> gaps; }; // 检查在给定时间 t 时,是否所有轮子的缺口都能对齐 bool check(const vector<Wheel>& wheels, int t) { // 遍历所有可能的角度 for (int angle = 0; angle < 360; ++angle) { bool allAligned = true; // 检查每个轮子在时间 t 时该角度是否有缺口 for (const auto& wheel : wheels) { bool hasGap = false; for (const auto& gap : wheel.gaps) { int start = (gap.first + wheel.speed * t) % 360; int end = (start + gap.second - 1) % 360; if (start <= end) { if (angle >= start && angle <= end) { hasGap = true; break; } } else { if (angle >= start || angle <= end) { hasGap = true; break; } } } if (!hasGap) { allAligned = false; break; } } if (allAligned) { return true; } } return false; } int main() { vector<Wheel> wheels(5); // 读取每个轮子的信息 for (int i = 0; i < 5; ++i) { int speed, numGaps; cin >> speed >> numGaps; wheels[i].speed = speed; for (int j = 0; j < numGaps; ++j) { int start, width; cin >> start >> width; wheels[i].gaps.emplace_back(start, width); } } // 遍历时间,从 0 到 360 秒 for (int t = 0; t <= 360; ++t) { if (check(wheels, t)) { cout << t << endl; return 0; } } cout << "none" << endl; return 0; } ``` 代码解释: 1. 结构体 `Wheel`:用于存储每个轮子的旋转速度和缺口信息。`speed` 表示轮子的旋转速度,`gaps` 是一个存储缺口起始角度和宽度的向量。 2. 函数 `check`:用于检查在给定时间 `t` 时,是否所有轮子的缺口都能对齐。通过遍历所有可能的角度,对于每个角度,检查每个轮子在该时间是否有缺口覆盖该角度。 3. 主函数 `main`: - 读取每个轮子的信息,包括旋转速度、缺口数量和每个缺口的起始角度和宽度。 - 遍历时间,从 0 到 360 秒,调用 `check` 函数检查是否有缺口对齐的情况。 - 如果找到对齐的时间,输出该时间并结束程序;否则,输出 `none`。 复杂度分析: - 时间复杂度:$O(360 \times 360 \times 5 \times 5)$,其中 360 是时间的最大值,360 是角度的最大值,5 是轮子的数量,5 是每个轮子最多的缺口数量。 - 空间复杂度:$O(5 \times 5)$,主要用于存储每个轮子的缺口信息。 [2026-02-03 15:22:29 | AI问答 | 857点数解答]
- [字节豆包] [USACO3.2]纺车的轮子 Spinning Wheels 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:普及 分数:100 OI排行榜得分:16(0.1*分数+2*难度) 出题人: 描述 一架纺车有五个纺轮(也就是五个同心圆),这五个不透明的轮子边缘上都有一些缺口。这些缺口必须被迅速而准确地排列好。每个轮子都有一个起始标记(在0度),这样所有的轮子都可以在统一的已知位置开始转动。轮子按照角度变大的方向旋转(即0经过旋转到达1的位置),所以从起始位置开始,在一定的时间内,它们依次转过1度,2度等等(虽然这些轮子很可能不会同时转过这些角度)。 这是一个整数问题。轮子不会转过1.5度或23.51234123度这样的角度。例如,轮子可能在一秒钟内转过20到25度甚至30到40度(如果转得快的话)。 这个问题中的所有角度都限制在 0 <= 角度 <= 359 这个范围内。轮子转过 359 度后接下来就是 0 度。每个轮子都有一个确定的旋转速度,以秒作为单位。1 <= 速度 <= 180。 轮子(857点数解答 | 2026-02-03 15:22:29)7
- [字节豆包] [USACO6.1]邮车 Postal Vans 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:普及 分数:100 OI排行榜得分:16(0.1*分数+2*难度) 出题人: 描述 郊区呈矩形,有四条东西方向的街道和N(1<=N<=1000)条南北方向的街道。 在郊区的西北角有一个邮局。 如N=5时,郊区如下图所示,圆点表示邮局,直线表示街道。 每天邮政卡车从邮局出发,每个十字路口(包括边界和四角)经过且只经过一次。现在邮局希望知道邮政货车行驶的路线有几种。 例如,下面两幅图表示的是满足上图的两条路线 另一个例子,下面四幅图表示了当N=3时的全部四种情况 。 输入描述 一行:一个数值N 。 输出描述 一行: 到INPUT中给出的街道的路径总数 。 用例输入 1 4 用例输出 1 12 c++(448点数解答 | 2026-02-03 15:19:59)7
- [字节豆包] [GESP202503 五级] 原根判断 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:未知 分数:100 OI排行榜得分:20(0.1*分数+2*难度) 出题人: 描述 小 A 知道,对于质数 p 而言,p 的原根 g 是满足以下条件的正整数: 1<g<p; g p−1 modp=1; 对于任意 1≤i<p−1 均有 g i modp =1。 其中 amodp 表示 a 除以 p 的余数。 小 A 现在有一个整数 a,请你帮他判断 a 是不是 p 的原根。 输入描述 第一行,一个正整数 T,表示测试数据组数。 每组测试数据包含一行,两个正整数 a,p。 输出描述 对于每组测试数据,输出一行,如果 a 是 p 的原根则输出 Yes,否则输出 No。 用例输入 1 3 3 998244353 5 998244353 7 998244353 用例输出 1 Yes Yes No 提示 【数据范围】 对于 40% 的测试点,保证 3≤p≤10 3 。 对于所有测试(668点数解答 | 2026-02-02 17:30:47)7
- [字节豆包] [GESP202503 五级] 原根判断 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:未知 分数:100 OI排行榜得分:20(0.1*分数+2*难度) 出题人: 描述 小 A 知道,对于质数 p 而言,p 的原根 g 是满足以下条件的正整数: 1<g<p; g p−1 modp=1; 对于任意 1≤i<p−1 均有 g i modp =1。 其中 amodp 表示 a 除以 p 的余数。 小 A 现在有一个整数 a,请你帮他判断 a 是不是 p 的原根。 输入描述 第一行,一个正整数 T,表示测试数据组数。 每组测试数据包含一行,两个正整数 a,p。 输出描述 对于每组测试数据,输出一行,如果 a 是 p 的原根则输出 Yes,否则输出 No。 用例输入 1 3 3 998244353 5 998244353 7 998244353 用例输出 1 Yes Yes No 提示 【数据范围】 对于 40% 的测试点,保证 3≤p≤10 3 。 对于所有测试(511点数解答 | 2026-02-03 17:11:00)7
- [字节豆包] 提高】卫星照片 USACO 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 128MB,其他语言 256MB 难度:普及 分数:100 OI排行榜得分:16(0.1*分数+2*难度) 出题人: 描述 农夫约翰总是想要一个农场的地图,所以他拍摄了一张N行M列的卫星照片。一部分的照片看起来像这样: .................. ..#####.......##.. ..#####......##... .................. #.......###.....#. #.....#####....... 他认为每个联通块都是一个谷仓或一头奶牛。联通块由若干个彼此水平或垂直相邻的#符号组成。以下的照片被认为是两个联通块: .... .#.. ..#. .... 农夫约翰认为一个联通块是谷仓,当且仅当它是一个完整的矩形,否则该联通块是一头奶牛。在第一张照片上面,有三个谷仓(大小分别为2x1,2x5和1x1)和两头奶牛。 计算他的卫星照片中谷仓和奶牛的数量。 输入描述 行1:两个空格分隔的整数:N和M(N,M<=80)。(850点数解答 | 2026-02-03 17:15:10)7
- [字节豆包] 【NOIP2014 基础】螺旋矩阵 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 128MB,其他语言 256MB 难度:提高 分数:100 OI排行榜得分:18(0.1*分数+2*难度) 出题人: 描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1,2,3,...,n 2 ,便构成了一个螺旋矩阵。 下图是一个 n=4 时的螺旋矩阵。 ⎝ ⎜ ⎜ ⎜ ⎛ 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 ⎠ ⎟ ⎟ ⎟ ⎞ 现给出矩阵大小 n 以及 i 和 j,请你求出该矩阵中第 i 行第 j 列的数是多少。 输入描述 共一行,包含三个整数 n, i, j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。 输出描述 一个整数,表(289点数解答 | 2026-02-02 17:32:56)7
- [字节豆包] 发现它,抓住它 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:基础 分数:100 OI排行榜得分:14(0.1*分数+2*难度) 出题人: 描述 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类: D [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为 A [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息需要你回答[a]和[b]是否是同一个团伙所为 注意你获得信息的时间是有先后顺序的,在回答的时候只能根据已经接收到的信息做出判断。 输入描述 第一行是测试数据的数量T(1<=T<=20)。 每组测试数据的第一行包括两个数N和M,分别表示案件的数量和信息的数量,其后M行表示按时间顺序收到的M条信息。 输出描述 对于每条需要回答(894点数解答 | 2026-02-02 17:28:01)7
- [字节豆包] 【提高】Comfortable Cows 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 128MB,其他语言 256MB 难度:提高 分数:100 OI排行榜得分:18(0.1*分数+2*难度) 出题人: 描述 Farmer Nhoj 的草地可以被看作是一个由正方形方格组成的巨大的二维方阵(想象一个巨大的棋盘)。初始时,草地上是空的。 Farmer Nhoj 将会逐一地将 NN(1≤N≤105)头奶牛加入到草地上。第 ii 头奶牛将会占据方格 (xi,yi),不同于所有已经被其他奶牛占据的方格(0≤xi,yi≤1000)。 一头奶牛被称为是「舒适的」,如果它水平或竖直方向上与恰好三头其他奶牛相邻。然而,太舒适的奶牛往往产奶量落后,所以 Farmer Nhoj 想要额外加入一些奶牛直到没有奶牛(包括新加入的奶牛)是舒适的。注意加入的奶牛的 xx 和 yy 坐标并不一定需要在范围 0…1000内。 对于 1…N 中的每个 i,输出当初始时草地上有奶牛 1…i 时,Farmer Nhoj 为使得没有奶牛舒适,需要加入的奶牛的最小数量。(956点数解答 | 2026-02-02 17:26:13)8
- [字节豆包] 【例78.3】回文数(Noip1999) 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 64MB,其他语言 128MB 难度:提高 分数:100 OI排行榜得分:18(0.1*分数+2*难度) 出题人: 描述 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87, STEP1: 87+78=165 STEP2: 165+561=726 STEP3: 726+627=1353 STEP4: 1353+3531=4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N(2<N≤10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。 输入描述 第1行,给定一个N(2<N≤10或N=16)表示进制; 第2行,一个N进制数M。 输出描述 最少几步。如果(811点数解答 | 2026-02-02 17:44:17)8
- [DeepSeek] n天后的日期 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:语法入门 分数:100 OI排行榜得分:10(0.1*分数+2*难度) 出题人: 描述 设计一程序,输入一个年月日(2023 7 18),输出n天后的日期。 输入描述 输入4个整数,分别是年、月、日和n天 输出描述 输出一行,为n后的日期,以yyyy-mm-dd的格式输出 样例输入 1 2023 7 19 365 样例输出 1 2024-07-18 (305点数解答 | 2025-02-28 17:21:26)278
- [字节豆包] n天后的日期(C++) 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:语法入门 分数:100 OI排行榜得分:10(0.1*分数+2*难度) 出题人: 描述 设计一程序,输入一个年月日(2023 7 18),输出n天后的日期。 输入描述 输入4个整数,分别是年、月、日和n天 输出描述 输出一行,为n后的日期,以yyyy-mm-dd的格式输出 样例输入 1 2023 7 19 365 样例输出 1 2024-07-18(436点数解答 | 2025-02-28 17:21:56)236
- [字节豆包] 字符统计 暂无标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:语法入门 分数:100 OI排行榜得分:10(0.1*分数+2*难度) 出题人: 描述 统计指定字符在输入的字符中出现的次数。(244点数解答 | 2025-04-13 13:46:56)175