#6511. 疯狂储蓄 (Лудо штедење)
疯狂储蓄 (Лудо штедење)
2026年 北马其顿编程竞赛 (Macedonian programming contests 2026)
赛事等级: 社区与地区选拔赛 (Community and Regional competition)
内容类型: 竞赛题目 (Competition tasks)
题目名称:疯狂储蓄 (Лудо штедење)
题目描述
你决定开始存钱,并在银行账户中存入了 第纳尔,这意味着你的初始余额为 。但你选择的这家银行非常奇怪,账户余额每天都会发生变化。
在存钱后的每一天 ():
- 如果 是奇数,余额增加 2 ()。
- 如果 是偶数,余额减少 1 ()。
更特殊的是,如果在任何时刻(增加或减少后),余额 变为了一个能被 4 整除的数,那么该余额会立即乘以 ,即 。
你的任务是计算在 天之后,你的最终账户余额 是多少。
输入格式
- 第一行包含两个整数: () 和初始余额 ()。
注意: 对于 50% 的测试点,。
输出格式
- 输出一个整数,代表 天后的最终余额 。
限制条件
- 时间限制: 100 毫秒
- 内存限制: 64 MB
样例说明
样例 1:
输入:6 3
输出:-2
- 第 1 天 (, 奇数):, 不能被 4 整除。
- 第 2 天 (, 偶数):, 能被 4 整除 。
- 第 3 天 (, 奇数):,不能被 4 整除。
- 第 4 天 (, 偶数):,不能被 4 整除。
- 第 5 天 (, 奇数):,不能被 4 整除。
- 第 6 天 (, 偶数):,不能被 4 整除。最终结果为
-2。
样例 2:
输入:15 5
输出:14
算法提示
由于 的范围高达 ,直接使用循环模拟()会导致超时(仅限 50% 的分数)。
- 规律观察:由于涉及“被 4 整除”和“正负反转”,数值的变化通常会进入一个较短的循环周期。
- 寻找周期:记录每次操作后的 状态。一旦状态重复,即可计算周期的步数和余额增量,从而利用取模运算直接跳过中间的大量循环。
- 数据类型:请务必使用
long long来处理 和 。
版权信息
- 项目: Macedonian Programming Contests 2026
- 赛事: Community and Regional competition
- 版权方: ZIM (北马其顿计算机科学家协会)