1 条题解

  • 0
    @ 2026-10-26 22:20:37

    思路与算法

    每轮删第1、4、7...个,剩余数量floor(2n/3);原最右苹果保持最右,首次当前数量模3等于1即被取走,同时继续算清空天数。

    按上述模型建立状态或枚举对象,依代码中的顺序处理输入并输出完整答案。

    正确性说明

    每轮删除位置1模3的苹果共ceil(n/3)个,剩余floor(2n/3)。原编号n在它还未被取走时始终是序列最后一个,故本轮当且仅当当前数量为1模3时取走它;直到数量0的轮次即清空天数。

    复杂度

    O(log n)时间、O(1)额外空间。

    易错点

    不能把“每隔2个”理解为每隔1个。记录末苹果取走后仍要继续模拟人数直到0。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        long long n;
        cin >> n;
        int day = 0, last = 0;
        while (n) {
            day++;
            if (!last && n % 3 == 1)
                last = day;
            n -= (n + 2) / 3;
        }
        cout << day << ' ' << last << "\n";
    }
    
    • 1

    信息

    ID
    1897
    时间
    1000ms
    内存
    512MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者