1 条题解

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

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 览遍千秋
    将伤与泪汇成力化作拳

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

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

    以下是正文


    Source and Knowledge

    2025 年 2 月语言月赛,由洛谷网校提供。

    考察循环结构。


    文字题解

    题目要求输出 nn 个数,第 ii 个数为 aia_i,并满足:

    • 对于所有的 1in1 \le i \le n106ai106-10^6 \le a_i \le 10^6
    • La1+a2++anRL \le a_1+a_2+\cdots+a_n \le R

    需要注意的是,本题不是考查随机数的生成,而是需要同学们根据题目的要求,提出一种方案,能够输出符合题意的一个数列。

    方案 1

    LL 做带余除法,假设 LL 除以 nnaabb。如果 LL 是正数,那么前面的表述不存在什么问题,但当 LL 为负数时,带余除法这一小学引入的概念,将出现一些歧义。

    更精确的,我们将“带余除法”表述为 L=an+bL=an+b,其中 0b<n0 \le b <n

    一般来说,我们要求取模运算后的结果必须为正数。如果 amodMa\bmod M 运算时,aa 可能是负数,可以通过 (a % M + M) % M 计算出正确的结果。

    下面是计算 a,ba,b 的值的代码。

    int b = (L % n + n) % n;
    int a = (L - b) / n;
    

    输出 bba+1a+1nbn-baa。这样,输出的数的总和为 b(a+1)+a(nb)=ab+b+anab=an+b=Lb(a+1)+a(n-b)=ab+b+an-ab=an+b=L,符合题意。

    方案 2

    循环 nn 次,判断:

    • L106L \ge 10^6,输出 10610^6,并将 LL 减去 10610^6
    • L106L \le -10^6,输出 106-10^6,并将 LL 加上 10610^6
    • 106<L<106-10^6<L<10^6,输出 LL,并将 LL 置为 00
    • 1

    信息

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