酷代码 AI
菜单
服务商

题目背景 在洛谷中,打卡不只是一个简单的鼠标点击动作,通过每天在洛谷打卡,可以清晰地 记录下自己在洛谷学习的足迹。通过每天打卡,来不断地暗示自己:我又在洛谷学习 了一天,进而帮助自己培养恒心、耐心、细心。此外,通过打卡,还可以获取经验值 奖励,经验值的多少在一定程度上反映了你在洛谷的资历和成就。通过打卡累积活跃 值,渐渐升级,会让你感觉“离神犇越来越近了”。 题目描述 洛谷的打卡系统与其他网站的打卡系统一样,连续打卡天数越多,每次打卡获得的奖 励也就越多,同时连续天数加上一天。然而,于其他网站只要一天不打卡,连续天数 就要清零。与其他网站不同的是,洛谷的打卡更具有人性化,如果多天不打卡,连续 天数仅仅只是减少,当遗漏天数越少,减少的天数也就越少。规则是减少2n-1天,n 为 连续遗漏天数。连续天数在下一次打卡时清算,打卡连续天数不会小于 0。也就是 说,如果每隔一天打卡,那么连续天数就不会变了。 当连续天数达到以下天数时,给予不同的活跃值奖励: 1 天:奖励 1(千里之行,始于足下) 3 天:奖励 2(坚持 3 天了,加油!) 7 天:奖励 3(曜日轮回) 30 天:奖

```cpp #include <iostream> using namespace std; // 根据连续打卡天数获取对应的活跃值奖励 int getReward(int consecutiveDays) { if (consecutiveDays >= 365) return 6; if (consecutiveDays >= 120) return 5; if (consecutiveDays >= 30) return 4; if (consecutiveDays >= 7) return 3; if (consecutiveDays >= 3) return 2; if (consecutiveDays >= 1) return 1; return 0; } int main() { int N; cin >> N; int totalReward = 0; int consecutiveDays = 0; int missedDays = 0; for (int i = 0; i < N; i++) { int isChecked; cin >> isChecked; if (isChecked) { // 计算断签后剩余的连续打卡天数 consecutiveDays = max(0, consecutiveDays - (2 * missedDays - 1)); consecutiveDays++; totalReward += getReward(consecutiveDays); missedDays = 0; } else { missedDays++; } } cout << totalReward << endl; return 0; } ``` [2025-11-16 19:45:59 | AI问答 | 316点数解答]

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