1 条题解

  • 0
    @ 2026-4-19 17:54:57

    题目题解

    题意分析

    题目要求我们构造一个长度为 nn 的严格递增序列
    1a1<a2<<an1001 \le a_1 < a_2 < \dots < a_n \le 100
    使得对于任意 1i<jn1 \le i < j \le n,满足:

    aimodiajmodja_i \bmod i \neq a_j \bmod j

    即每个位置的“元素值对下标取模”的结果两两不同。


    思路推导

    第一步:分析取模结果的范围

    对于第 ii 个位置,aimodia_i \bmod i 的结果只能是 0,1,2,,i10, 1, 2, \dots, i-1 中的某一个数。

    第二步:利用“所有结果互不相同”的条件

    • i=1i = 1 时:a1mod1=0a_1 \bmod 1 = 0(唯一结果)。
    • i=2i = 2 时:a2mod2a_2 \bmod 2 可以是 0011
      00 已经被 i=1i=1 占用,所以必须取 11
    • i=3i = 3 时:a3mod3a_3 \bmod 3 可以是 0,1,20,1,2
      0011 已经被占用,所以必须取 22
    • 依此类推,我们可以得到:
    aimodi=i1a_i \bmod i = i - 1

    即每个 aia_i 必须满足:

    aii1(modi)a_i \equiv i-1 \pmod{i}

    第三步:转化为方程

    由同余关系,aia_i 可以写成:

    ai=ki+(i1)=(k+1)i1a_i = k \cdot i + (i - 1) = (k+1) \cdot i - 1

    其中 kk 是非负整数。

    第四步:增加递增和范围限制

    • 序列严格递增:a1<a2<<ana_1 < a_2 < \dots < a_n
    • 题目要求 ai100a_i \le 100
    • 同时 aiia_i \ge i(因为 aimodi=i1a_i \bmod i = i-1,若 ai<ia_i < iai=i1a_i = i-1,但此时 aimodi=i1a_i \bmod i = i-1 也成立,不过 ai1a_{i-1} 可能已经占用该值,需要进一步检查)。

    为了简单且可行,我们可以取 k=1k = 1,即:

    ai=2i1a_i = 2i - 1

    这样:

    • aimodi=(2i1)modi=i1a_i \bmod i = (2i - 1) \bmod i = i - 1,满足条件。
    • 序列为 1,3,5,,2n11, 3, 5, \dots, 2n - 1,严格递增。
    • n50n \le 50 时,2n1991002n - 1 \le 99 \le 100,满足范围限制。

    第五步:验证可行性

    • 所有 aimodi=i1a_i \bmod i = i - 1,互不相同(因为 i1i - 1 互不相同)。
    • 序列递增且值在 11100100 之间。
    • 构造简单,直接输出 2i12i - 1 即可。

    算法步骤

    1. 读入 tt 组测试数据。
    2. 对于每组数据,读入 nn
    3. 输出 nn 个数:1,3,5,,2n11, 3, 5, \dots, 2n - 1

    时间复杂度

    每组数据 O(n)O(n),总复杂度 O(n)O(2500)O(\sum n) \le O(2500),非常高效。


    参考代码

    #include<bits/stdc++.h>
    using namespace std;
    
    void solve() {
      int n; cin >> n;
      for (int i = 1; i <= n; i++) {
        cout << 2 * i - 1 << ' ';
      }
      cout << '\n';
    }
    
    int main() {
      ios_base::sync_with_stdio(0);
      cin.tie(0);
      int t; cin >> t;
      while (t--) solve();
      return 0;
    }
    

    总结

    本题的核心是通过分析取模结果互不相同的约束,推出每个 aia_i 必须满足 aii1(modi)a_i \equiv i-1 \pmod{i},然后取最简单的解 ai=2i1a_i = 2i - 1,即可在给定范围内构造出合法序列。

    • 1

    信息

    ID
    6593
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者