1 条题解

  • 0
    @ 2025-8-24 23:01:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Register_int
    分道扬镳

    搬运于2025-08-24 23:01:21,当前版本为作者最后更新于2024-07-21 16:19:19,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    由于只能加 yy 进制表示下的最高位,这个最高位显然是 x\le x 的。这个最大值可以取到,当 y=xy=x 时,xxyy 进制表示是 1010,直接加成 2020 即可。每次操作会将 xx 变成 2x2x,所以最终答案是 2nx2^nx……
    吗?事实上,当 x2x\le2 时这样是行不通的,因为没有 11 进制,22 进制下 2020 会进位。所以单独讨论第一步:

    • x=1x=1 时,选取 y=3y=3xx33 进制表示为 11,加上即可,答案为 22
    • x=2x=2 时,xx 单独为最高位的情况只有二进制,显然行不通。所以加上的数 <2<2。取 y=4y=4x=2x=2,直接加上即可,答案为 33

    那就做完了。

    AC 代码

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    
    const int MAXN = 2e5 + 10;
    const int mod = 1e9 + 7;
    
    inline 
    int qpow(int b, int p) {
    	int res = 1;
    	for (; p; p >>= 1, b = (ll)b * b % mod) if (p & 1) res = (ll)res * b % mod;
    	return res;
    }
    
    int T, x, n;
    
    int main() {
    	for (scanf("%d", &T); T--;) {
    		scanf("%d%d", &x, &n);
    		if (x == 1) x = 2, n--;
    		if (!n) { printf("%d\n", x); continue; }
    		if (x == 2) x = 3, n--;
    		printf("%d\n", (ll)x * qpow(2, n) % mod);
    	}
    }
    
    • 1

    信息

    ID
    9762
    时间
    1500ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者