P1009天气之子 普及- CSP-S组 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2238/7787 题目描述 在一个古老的部落里,有一个关于天气之子的试炼。 试炼将会给出连续 n n 天的天气情况。每种天气被一个正整数编号。相同的正整数表示同一种天气。 每一天前,接受天气之子试炼的成员们必须每天给出当天的天气预报。预报准确率最高的会成为部落的天气之子。 你想出了一个奇妙的预报方法: 第一天预报天气为 <天气类型1>。从第二天开始: 若前一天预报成功,预报的天气类型保持不变。 若预报失败,统计前面所有天中的最多的天气(多种天气都是最多时,预报其中该天气第一次出现最晚的天气种类),修改当天的预报为该天气。 你的任务是计算你的预报成功天数。 输入格式 第一行一个正整数 n n,表示一共有 n n 天进行天气预报。 接下来一行 n n 个正整数 a 1 . . . a n a 1 ...a n ,其中 a i a i 表示第 i i 天的天气情况。相同的正整数表示
```cpp #include <iostream> #include <vector> #include <unordered_map> // 找到前面所有天中最多的天气,多种天气都是最多时,返回该天气第一次出现最晚的天气种类 int mostFrequentWeather(const std::vector<int>& weather, int endDay) { std::unordered_map<int, int> count; std::unordered_map<int, int> firstAppear; int maxCount = 0; int mostFrequent = 0; for (int i = 0; i < endDay; ++i) { count[weather[i]]++; if (firstAppear.find(weather[i]) == firstAppear.end()) { firstAppear[weather[i]] = i; } if (count[weather[i]] > maxCount || (count[weather[i]] == maxCount && firstAppear[weather[i]] > firstAppear[mostFrequent])) { maxCount = count[weather[i]]; mostFrequent = weather[i]; } } return mostFrequent; } // 计算预报成功的天数 int calculateSuccessDays(const std::vector<int>& weather) { int n = weather.size(); int forecast = weather[0]; int success = 0; for (int i = 0; i < n; ++i) { if (forecast == weather[i]) { success++; } else { forecast = mostFrequentWeather(weather, i + 1); } } return success; } int main() { int n; std::cin >> n; std::vector<int> weather(n); for (int i = 0; i < n; ++i) { std::cin >> weather[i]; } int result = calculateSuccessDays(weather); std::cout << result << std::endl; return 0; } ``` 代码解释 1. `mostFrequentWeather`函数: - 该函数接收一个存储天气情况的向量`weather`和一个表示天数的整数`endDay`。 - 它使用两个`unordered_map`:`count`用于记录每种天气出现的次数,`firstAppear`用于记录每种天气第一次出现的位置。 - 遍历前面所有天的天气情况,更新`count`和`firstAppear`。找出出现次数最多且第一次出现最晚的天气种类。 2. `calculateSuccessDays`函数: - 该函数接收一个存储天气情况的向量`weather`。 - 首先将第一天的预报天气设为第一天的实际天气。 - 遍历每一天,如果预报天气和实际天气相同,成功天数加1;否则,调用`mostFrequentWeather`函数更新预报天气。 3. `main`函数: - 读取输入的天数`n`和每天的天气情况,并存储在向量`weather`中。 - 调用`calculateSuccessDays`函数计算预报成功的天数,并输出结果。 复杂度分析 - 时间复杂度:对于每一天,计算前面所有天中最多的天气需要 $O(n)$ 的时间,因此总的时间复杂度为 $O(n^2)$。 - 空间复杂度:使用了两个`unordered_map`来记录天气出现的次数和第一次出现的位置,空间复杂度为 $O(m)$,其中 $m$ 是不同天气的种类数。 [2026-02-07 18:29:12 | AI问答 | 797点数解答]
- [字节豆包] P1009天气之子 普及- CSP-S组 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2238/7787 题目描述 在一个古老的部落里,有一个关于天气之子的试炼。 试炼将会给出连续 n n 天的天气情况。每种天气被一个正整数编号。相同的正整数表示同一种天气。 每一天前,接受天气之子试炼的成员们必须每天给出当天的天气预报。预报准确率最高的会成为部落的天气之子。 你想出了一个奇妙的预报方法: 第一天预报天气为 <天气类型1>。从第二天开始: 若前一天预报成功,预报的天气类型保持不变。 若预报失败,统计前面所有天中的最多的天气(多种天气都是最多时,预报其中该天气第一次出现最晚的天气种类),修改当天的预报为该天气。 你的任务是计算你的预报成功天数。 输入格式 第一行一个正整数 n n,表示一共有 n n 天进行天气预报。 接下来一行 n n 个正整数 a 1 . . . a n a 1 ...a n ,其中 a i a i 表示第 i i 天的天气情况。相同的正整数表示(797点数解答 | 2026-02-07 18:29:12)2
- [字节豆包] P1009天气之子 普及- CSP-S组 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2238/7787 题目描述 在一个古老的部落里,有一个关于天气之子的试炼。 试炼将会给出连续 n n 天的天气情况。每种天气被一个正整数编号。相同的正整数表示同一种天气。 每一天前,接受天气之子试炼的成员们必须每天给出当天的天气预报。预报准确率最高的会成为部落的天气之子。 你想出了一个奇妙的预报方法: 第一天预报天气为 <天气类型1>。从第二天开始: 若前一天预报成功,预报的天气类型保持不变。 若预报失败,统计前面所有天中的最多的天气(多种天气都是最多时,预报其中该天气第一次出现最晚的天气种类),修改当天的预报为该天气。 你的任务是计算你的预报成功天数。 输入格式 第一行一个正整数 n n,表示一共有 n n 天进行天气预报。 接下来一行 n n 个正整数 a 1 . . . a n a 1 ...a n ,其中 a i a i 表示第 i i 天的天气情况。相同的正整数表示(734点数解答 | 2026-02-07 18:30:34)2
- [字节豆包] P1007小核桃与数组变换 普及/提高- CSP-J组 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1188/3750 题目描述 一个长度为 n n 的数组,每秒都在发生变换。 每一次变换,第 1 1 个位置的数字将会和第 2 2 个位置的数字合并,第 3 3 个位置的数字将会和第 4 4 个位置的数字合并,以此类推。。 这个数组会一直变换到只剩两个数字为止。 合并数字时,将会使得两个数字相加。例如数组 [1,2,3,4,5] 第一秒会变成 [3,7,5](前两个数字合并,第三和第四个数字合并,由于没有第六个数字,所以第五个数字不变)第二秒会变成 [10, 5],此时数组中只剩两个数字,变换结束。 现在小核桃想知道最后的两个数字的平方和是多少。例如上述数组,平方和为 10 ∗ 10 + 5 ∗ 5 = 125 10∗10+5∗5=125 由于这个数组长度很大,所以小核桃在给你数据时采用了一种新的方式。小核桃总共会给出 k k 条信息,每条信息包含两个正整数 a , b a,b,表示这个数(416点数解答 | 2026-02-07 18:24:18)2
- [字节豆包] P1007小核桃与数组变换 普及/提高- CSP-J组 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1188/3750 题目描述 一个长度为 n n 的数组,每秒都在发生变换。 每一次变换,第 1 1 个位置的数字将会和第 2 2 个位置的数字合并,第 3 3 个位置的数字将会和第 4 4 个位置的数字合并,以此类推。。 这个数组会一直变换到只剩两个数字为止。 合并数字时,将会使得两个数字相加。例如数组 [1,2,3,4,5] 第一秒会变成 [3,7,5](前两个数字合并,第三和第四个数字合并,由于没有第六个数字,所以第五个数字不变)第二秒会变成 [10, 5],此时数组中只剩两个数字,变换结束。 现在小核桃想知道最后的两个数字的平方和是多少。例如上述数组,平方和为 10 ∗ 10 + 5 ∗ 5 = 125 10∗10+5∗5=125 由于这个数组长度很大,所以小核桃在给你数据时采用了一种新的方式。小核桃总共会给出 k k 条信息,每条信息包含两个正整数 a , b a,b,表示这个数组中有一段长度为 a a 的(651点数解答 | 2026-02-07 18:25:02)1
- [字节豆包] P1015禾木与栅栏 普及- 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2998/4446 题目描述 面条老师给禾木一个任务,让他根据给定的 n n 和 k k ,打印出一个栅栏图案,这个栅栏应该分成 n n 段,段与段之间的间隔为 | ,段内的填充为 k k 个 = 。 例如 n = 5 , k = 6 n=5,k=6 时,栅栏图案如下: 复制 |======|======|======|======|======| 输入格式 输入包括一行,包含两个整数 n , k n,k,表示栅栏的段数和每一段中填充的数量。 输出格式 输出包括一行,表示符合要求的栅栏图案。 input1 复制 1 1 output1 复制 |=| input2 复制 5 5 output2 复制 |=====|=====|=====|=====|=====| 提示 对于 100 % 100% 的数据,保证 1 ≤ n , k ≤ 15 1≤n,k≤15,用C++(160点数解答 | 2026-02-07 18:36:06)3
- [DeepSeek] P3631[NOIP2003 普及组] 乒乓球 普及- 字符串 NOIp 普及组 模拟 2003 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 411/1121 来源 洛谷 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 11 分制和 21 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 11 分制和 21 21 分制下,双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中 W W 表示华华获得一分, L L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW WWWWWWWWWWWWWWWWWWWWWWLW 在 11 11 分制下,此时(675点数解答 | 2025-04-28 18:19:45)282
- [字节豆包] P1008小核桃与插班生 普及+/提高 CSP-J组 前缀和 差分 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2903/4997 题目描述 一排学生共 n n 个人在一起听课,分别坐在位置 1 , 2 , 3... n 1,2,3...n,每个人都有一个听课认真度 a i a i ,这时来了一个调皮的插班生,他会影响别人听课。具体来说,距离他 d i s dis 的学生(距离即两个人位置之差的绝对值),听课认真度将减少 n − d i s n−dis,注意,一位学生的听课认真度最低不会低于 0 0。总共有 n n 个座位供插班生选择,被占领座位的学生将被踢出班级,其他人的座位不变,但听课认真度会减少。现在想知道,如果插班生坐在了位置 1 , 2 , 3 , 4... n 1,2,3,4...n,所有学生的听课认真度之和分别是多少。(插班生没有听课认真度) 输入格式 第一行输入一个正整数 n n, 表示学生的个数。 接下来一行输入 n n 个正整数,表示每个学生的听课认真度。 输出格式(642点数解答 | 2026-02-07 18:26:52)1
- [字节豆包] P1018小核桃与数组规则 普及- CSP-J组 排序 线性DP 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2225/2901 题目描述 小核桃身处在一个神秘的逃生游戏中,他需要通过解决各种谜题来获得能够帮助他逃脱的物品。在一道谜题中,小核桃被赋予了一个整数数组和一组规则,让他按顺序进行操作。以下是给小核桃的指示:给定一个整数数组,请按以下方法计算得分最高的方案: 首先选择一个整数 v v 并删除数组中所有等于 v v 的元素,并将它们的总和加入积分中。 同时,删除数组中所有等于 v + 1 v+1 或 v − 1 v−1 的元素,这些元素不得分。 重复上述步骤,直到数组中没有更多的元素为止。 现在,小核桃需要计算按照这些规则可以获得的最大分数是多少? 输入描述 第一行包含一个整数 n n,表示有 n n 个整数。 第二行包含 n n 个整数,表示第 i i 个数字值为 a i a i ,之间以一个空格隔开。 输出描述 计算出小核桃按照规则可以获得的最大分数。 input1 复制 (555点数解答 | 2026-02-07 18:38:00)3
- [字节豆包] P1019小核桃与积木堆 普及- CSP-J组 排序 贪心 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1787/2245 题目描述 数字线上的某些整数坐标处有 n n 个积木,小核桃不喜欢积木四处散落。所以他打算搬动积木,堆成不超过 m m 堆的积木堆。将坐标值 X X 的积木全部搬到到坐标值 Y Y 处,需要消耗 ∣ X − Y ∣ ∣X−Y∣ 的能量。 计算小核桃把玩具堆成不超过 m m 堆需要消耗的最小能量值。 输入描述 第一行包含两个整数,之间以一个空格隔开,分别是 n n, m m, n n 代表积木总数量, m m 代表最大堆数。 第二行包含 n n 个整数, x i x i 表示积木 i i 所处坐标值为 a i a i ,之间以一个空格隔开。 输出描述 计算出把积木堆成不超过 m m 堆需要消耗的最小能量值。 input1 复制 4 1 10 5 3 12 output1 复制 9 input2 复制 4 2 1 20 3 100 output2 复制(780点数解答 | 2026-02-07 18:38:58)3
- [字节豆包] P1020小核桃与删除字符串 普及+/提高 CSP-J组 双指针 二分答案 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1481/2524 题目描述 给一个长度为 n n 的 01 01 字符串,你可以任意选择下面两个操作任意次: 从左往右删除任意长度连续段 从右往左删除任意长度连续段 现在要求 m a x ( 删掉的 1 , 剩下的 0 ) max(删掉的1,剩下的0) 最小。 输入描述 输入一行只包含 01 01 的字符串。 输出描述 输出一个整数,表示答案。 input1 复制 1001001001001 output1 复制 3 input2 复制 111011001000 output2 复制 1用C++(330点数解答 | 2026-02-07 18:40:10)3
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)434
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)430