酷代码 AI
菜单
服务商

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> using namespace std; // 找到前面所有天中最多的天气(多种天气都是最多时,返回该天气第一次出现最晚的天气种类) int findMostFrequentWeather(const vector<int>& weather, int endDay) { unordered_map<int, int> count; unordered_map<int, int> firstAppearance; // 统计每种天气出现的次数和第一次出现的位置 for (int i = 0; i < endDay; ++i) { if (firstAppearance.find(weather[i]) == firstAppearance.end()) { firstAppearance[weather[i]] = i; } count[weather[i]]++; } int maxCount = 0; int mostFrequent = 0; int latestFirstAppearance = -1; // 找出出现次数最多的天气,若有多个,选择第一次出现最晚的 for (const auto& pair : count) { if (pair.second > maxCount || (pair.second == maxCount && firstAppearance[pair.first] > latestFirstAppearance)) { maxCount = pair.second; mostFrequent = pair.first; latestFirstAppearance = firstAppearance[pair.first]; } } return mostFrequent; } int main() { int n; cin >> n; vector<int> weather(n); // 读取每天的天气情况 for (int i = 0; i < n; ++i) { cin >> weather[i]; } int forecast = weather[0]; int successDays = 0; // 进行预报并统计成功天数 for (int i = 0; i < n; ++i) { if (forecast == weather[i]) { successDays++; } else { if (i > 0) { forecast = findMostFrequentWeather(weather, i + 1); } } if (i < n - 1 && forecast == weather[i]) { continue; } } cout << successDays << endl; return 0; } ``` 代码解释 1. `findMostFrequentWeather` 函数: - 该函数接收一个表示天气情况的向量 `weather` 和表示统计截止天数的 `endDay`。 - 使用两个 `unordered_map` 分别存储每种天气出现的次数 `count` 和第一次出现的位置 `firstAppearance`。 - 遍历截止天数前的所有天气,统计每种天气的相关信息。 - 遍历 `count`,找出出现次数最多的天气,若有多个天气出现次数相同,选择第一次出现最晚的那个。 2. `main` 函数: - 首先读取天数 `n` 和每天的天气情况,存入向量 `weather` 中。 - 初始化预报天气为第一天的天气。 - 遍历每天的天气,若预报正确则成功天数加 1,若预报失败则调用 `findMostFrequentWeather` 函数更新预报天气。 - 最后输出预报成功的天数。 [2026-02-07 18:30:34 | AI问答 | 734点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多