1 条题解

  • 0
    @ 2025-8-24 23:12:58

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar brofea5
    人生就像动态规划,在早已给定的值里反反复复地找最优解

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

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

    以下是正文


    题意

    120251~2025 的排列 A1A2025A_{1}~A_{2025} 使得任意的 1ij20251\le i\le j \le 2025Ai×Aji×j+2025A_i\times A_j \le i\times j +2025 都成立的合法排列数量

    答案取模 1×109+71\times10^9+7

    思路

    i=ji=j 时,Ai2i2+2025A_i^2 \le \lfloor i^2 +2025\rfloor,跑一次循环可知当 1013i20251013\le i\le 2025 时,AiiA_i\le i

    且由于 A11012A_{1~1012} 都小于 10131013,所以 A11013A_{1~1013} 就会把 110131~1013 都占用完,所以 A1014A_{1014} 只能等于 10141014A1015A_{1015} 只能等于 10151015……以此类推可以得到:

    Ai=i (1014i2025)A_i=i~(1014\le i\le 2025)

    对于任意的 1i1012,1014j20251\le i\le 1012,1014\le j\le 2025,都满足:AiAj=Aijij+2025A_iA_j=A_ij\le ij+2025,两边同除 jj 即:Aii+2025/jA_i\le \lfloor i+2025/j\rfloor,任意 jj 都要满足此式,所以根据 jj 的范围可以得到

    Aii+1 (1i1012)A_i\le i+1~(1\le i\le 1012)

    我们可以看看在此式下是不是满足题目条件:(1i1012)(1\le i\le 1012)

    AiAj(i+1)(j+1)=ij+i+j+1ij+2025A_i A_j \le (i+1)(j+1)=ij+i+j+1\le ij +2025

    由于 i+j+11012+1012+1=2025i+j+1\le1012+1012+1=2025 所以满足题目条件

    也就是说:

    • A1A_1 可以取 1,21,2

    • A2A_2 可以取 1,2,31,2,3

    • A3A_3 可以取 1,2,3,41,2,3,4

      ……

    • A1012A_{1012} 可以取 1,2,3,4......10131,2,3,4......1013

    • A1013A_{1013} 可以取 1,2,3,4......10131,2,3,4......1013

    那么 A1A_1 取法有 22 种,取了一个后 A2A_2 取法有 22 种……取了 10111011 个后 A1012A_{1012} 取法有两种,而 A1013A_{1013} 只能取 A1012A_{1012} 取剩下的

    总共 210122^{1012} 种,使用快速幂或者暴力解都行

    #include <bits/stdc++.h>
    using namespace std;
    const int MOD = 1e9 + 7;
    int qmi(int m, int k, int p) {
      long long t = m, res = 1;
      while (k ) {
        if (k&1) res = res*t%p;
        t = t*t%p;
        k >>=1;
      }
      return res;
    }
    int power(int m, int k, int p) {
      int res = 1;
      while (k--)
        res = res * m % p;
      return res;
    }
    signed main() {
      cout << qmi(2, 1012, MOD) << "\n";
      cout << power(2, 1012, MOD) << "\n";
      return 0;
    }
    
    • 1

    信息

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