1 条题解

  • 0
    @ 2026-10-18 23:51:36

    [CSP-X 2023 山东] 克隆机

    知识点

    分段计数、倍增、整除定位

    解题思路

    放入机器的种子序列依次是每种1个、每种2个、每种4个……每轮k个字母各重复block次。若n超过本轮k*block个,就减去这整轮并令block翻倍;否则用(n-1)/block定位到本轮的字母。

    正确性说明

    每种种子取出一次会在队尾加入两个同类种子,因此完整处理一轮后,下一轮同一字母连续出现次数恰好翻倍,字母顺序不变。跳过的整轮长度和块内除法都由此精确计数。

    易错点

    n从1开始,定位前减1;k=1时始终为A;不能真的模拟10^18次;64位整数覆盖本题需要的轮长。

    复杂度

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

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){long long k,n;cin>>k>>n;long long block=1;while(n>k*block){n-=k*block;block*=2;}cout<<char('A'+(n-1)/block)<<'\n';}
    
    • 1

    信息

    ID
    858
    时间
    1000ms
    内存
    512MiB
    难度
    普及−
    标签
    递交数
    0
    已通过
    0
    上传者