1 条题解

  • 0
    @ 2025-9-10 8:58:59

    C++ :

    #include <stdio.h>
    #include <assert.h>
    
    #include <iostream>
    
    const int MOD = 1000000007;
    const int N = 100000 + 5;
    const int K = 23;
    typedef long long llong;
    #define debug(x) std::cout << (#x) << "=" << (x) << std::endl;
    
    int f[N][K];
    int a[K], b[K];
    
    int main()
    {
      int casc;
      scanf("%d", &casc);
      for (int casi = 1; casi <= casc; ++casi) {
        int k, n;
        scanf("%d %d", &k, &n);
        for (int i = 1; i <= k; ++i)
          f[0][i] = i;
        int l, r;
        for (int i = 1; i <= n; ++i) {
          scanf("%d %d", &l, &r);
          int* pre = f[i-1];
          int* now = f[i];
          for (int j = 1; j <= k; ++j) {
            if (l <= j && j <= r)
              now[j] = pre[r-j+l];
            else now[j] = pre[j];
          }
        }
        int q;
        scanf("%d", &q);
        llong result = 0;
        for (int qi = 1; qi <= q; ++qi) {
          int l, r;
          scanf("%d %d", &l, &r);
          int* fl = f[l-1];
          int* fr = f[r];
          for (int i = 1; i <= k; ++i)
            a[fl[i]] = i;
          for (int i = 1; i <= k; ++i)
            b[i] = a[fr[i]];
          llong hsh = 0;
          llong power = 1;
          for (int i = 1; i <= k; ++i) {
            power = power * 23 % MOD;
            hsh = (hsh + b[i] * power) % MOD;
          }
          result = (result + hsh) % MOD;
        }
        printf("%d\n", result);
      }
      return 0;
    }
    
    
    • 1

    信息

    ID
    3509
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者