1 条题解

  • 0
    @ 2025-8-24 21:14:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 一扶苏一
    休息结束。邮箱 yifusuyi@qq.com

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

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

    以下是正文


    [语言月赛202304G] 扶苏与 1 题解

    Source & Knowledge

    2023 年 4 月语言月赛,由洛谷网校入门计划/基础计划提供。

    本题考查简单构造、循环语句和字符串处理。

    文字题解

    题目大意

    给定 xx,请构造 yy,使得 x+yx + y 有恰好 kk 个进位。

    保证 xx 的长度不小于 10310^{3}kk 不大于 xx 的长度。xx 是非负整数。

    构造的 yy 必须是正整数,且长度不超过 10410^4

    解析

    注意到 xx 的最高位不为 00,加上 99 一定会产生进位。
    xx 最高位前面一位为 00,但是受到了它下一位的进位,再加上 99 一定会产生进位。
    xx 最高位前面第二位为 00,但是受到了它下一位的进位,再加上 99 一定会产生进位。
    ……
    把上述推导重复 kk 次,就能构造出 kk 个进位。

    具体而言,从 xx 的最高位向前构造 kk99,而 xx 的次高位到最后一位均为 00 即可。例如,若 x=12345x = 12345k=4k = 4,只需要令 y=99990000y = 99990000

    注意到只会构造 kk99,和不超过 xx 的长度个 00yy 的总长度低于 xx 长的的两倍,也就是 2×1032 \times 10^3,符合要求。

    唯一无解的情况是,当 x=0x = 0 时,无法构造出任何进位,输出 1-1

    实现上,只需要输出 kk99xx 长度减去 1100 即可。

    for (int i = 1; i <= k; ++i) printf("9");
    for (int i = 1; i < x.length(); ++i) printf("0");
    printf("\n");
    

    因为是多组数据,请一定记得在每组数据最后输出换行。

    视频题解

    完整代码请在视频题解中查看

    • 1

    信息

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