当前位置: 首页 > news >正文

记录一个神秘做法

题面:[HZOI]CSP-S模拟12 & 多校2025暑假集训模拟赛8 T3

大意简述:给定一个长度为 \(n\) 的序列,给定 \(k\)\(mod\) 。求该序列 \(k\) 个下个排列的逆序对求和。

赛时看了一眼题,嗯。。。

如果暴力枚举每个序列的话肯定 \(TLE\) 。因为 \(k /in [1,1e18]\) ,所以直接放弃暴力,开始乱搞。(赛后事实证明乱搞跟暴力分一样高)

开始手膜样例。

自己手膜了 \(n\)

#include<bits/stdc++.h>
// #define getchar_unlocked getchar
// #define putchar_unlocked putchar
#define ent putchar_unlocked('\n')
#define con putchar_unlocked(' ')
#define int __uint128_t
#define Blue_Archive return 0
using namespace std;
const int N = 5e5 + 3;int n;
int k;
int mod;
int ans;
int top;int a[N];
int f[N];
int g[N];
int t[N];bool vis[N];inline int read()
{int x = 0,f = 1;char c = getchar_unlocked();while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar_unlocked();}while(c >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0',c = getchar_unlocked();return x * f;
}inline void write(int x)
{if(x < 0) putchar_unlocked('-'),x = -x;if(x > 9) write(x / 10);putchar_unlocked(x % 10 + '0');
}inline void init()
{f[1] = 0;g[1] = 1;t[1] = 1;for(int i = 2;i <= n;i ++){t[i] = (t[i - 1] + i) % mod;g[i] = g[i - 1] * i;f[i] = (f[i - 1] * i % mod + g[i - 1] * t[i - 1] % mod) % mod;}
}inline int find()
{if(n == 0) return 0;int res = 0;vis[a[1]] = 1;res += (a[1] - 1) * g[n - 1] % mod;for(int i = 2;i <= n;i ++){for(int j = 1;j < a[i];j ++){if(vis[j]) continue;res += g[n - i];}vis[a[i]] = 1;}return res + 1;
}inline int solve(int skk)
{if(skk == 0) return 0;int res = 0;int op = skk / g[n];res = op * f[n] % mod;skk %= g[n];for(int i = n - 1,tim;i >= 1;i --){tim = skk / g[i];skk %= g[i];res += t[tim - 1] * g[i] + f[i] * tim;res += skk * tim;}return res;
}signed main()
{// freopen("3.in","r",stdin);// freopen("3.out","w",stdout);freopen("army.in","r",stdin);freopen("army.out","w",stdout);n = read();k = read();mod = read();init();for(int i = 1;i <= n;i ++) a[i] = read();int jk = find();ans = solve(k + jk - 1) - solve(jk - 1);write((ans % mod + mod) % mod);ent;Blue_Archive;
}
http://www.sczhlp.com/news/13218/

相关文章:

  • 单元测试三大神器:unittest vs JUnit vs Jest 终极对决
  • 数据点配置工具使用教程
  • 怎么马上上大学了
  • 深入解析:Java集合类综合练习题
  • 爬虫入门
  • 关键词提取实战指南:方法选择与应用注意事项解析
  • 软件测试基础知识 + 面试理论(超详细)
  • 在AI技术快速落地的时代,挖掘创意工具的新需求成为关键——某知名Adobe插件框架需求分析
  • day22
  • ESP32-S3 控制 BMP280气压传感器
  • OI 如何配置 Visual Studio Code
  • ESP32-S3 控制 传感器模块
  • ESP32-S3 控制 红外寻迹模块
  • ESP32-S3 控制 红外避障模块
  • ESP32-S3 控制 MPU6050模块
  • 全局二叉平衡树
  • ESP32-S3 控制 触摸开关传感器
  • ESP32-S3 控制 旋转编码器实验
  • ESP32-S3 控制 PS2传感器模块
  • godot shader 等高线的绘制 和 模型描边的绘制 和 shader 常用算法
  • 2025.8计算几何做题记录
  • 深入解析:把“距离过近”的节点(或端点)合并成一个,避免重复。机器学习 python
  • 5.2 基本的文件处理
  • 标注工具Labelimg的安装与使用
  • 分布式调度XXL-JOB - 详解
  • 碎碎念(十二)
  • 25-暑期-来追梦noip-卷2
  • day13_MVC_前后端分离
  • day15_mybatis2
  • day14_mybatis1