[JLOI2016] 成绩比较

news/2025/2/23 11:48:35/文章来源:https://www.cnblogs.com/watersail/p/18731962
  • 在钦定K位被“碾压”的同学之后,直接DP无法保证剩下的N-K-1位同学都不被“碾压”,因此我们只能统计出被碾压的同学数不小于K的情况。然而,这样做依然会导致大于K的情况被算重,所幸算重的次数是可预知的,所以我们可以通过容斥的方法排除重复的情况,得到最终的答案
  • lagrange插值优化:最高项n-1次,和n次,需要n+1个点确定
#include <bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int u[105],r[105];
long long g[105][105],h[105];
int power(int n,int p)
{if(p==0){return 1;}long long tmp=power(n,p/2);if(p%2==1){return tmp*tmp%mod*n%mod;}return tmp*tmp%mod;
}
long long jc[1000005],jcinv[1000005];
void pre()
{jc[0]=1;for(int i=1;i<=1000000;i++){jc[i]=jc[i-1]*i%mod;}jcinv[1000000]=power(jc[1000000],1000000005);for(int i=1000000-1;i>=0;i--){jcinv[i]=jcinv[i+1]*(i+1)%mod;}
}
long long c(int n,int m)
{if(m>n){return 0;}return jc[n]*jcinv[m]%mod*jcinv[n-m]%mod;
}
int n,m,k;
int y[1000005];
long long s[1000005];
long long t[1000005];
long long lagrange(int m,int k)
{s[0]=1;for(int i=1;i<=m;i++){s[i]=s[i-1]*(k-i)%mod;}t[m+1]=1;for(int i=m;i>=1;i--){t[i]=t[i+1]*(k-i)%mod;}long long ans=0;for(int i=1;i<=m;i++){long long p=s[i-1]*t[i+1]%mod,q=jc[m-i]*jc[i-1]%mod;if((m-i)%2==1){q=-q;}ans=(ans+y[i]*p%mod*power(q,1000000005)%mod)%mod;}return ans;
}
void dp()
{for(int k=n-1;k>=1;k--){if(n-*max_element(r+1,r+m+1)<k){continue;}g[k][0]=1;for(int i=1;i<=m;i++){g[k][i]=0;for(int j=1;j<=min(n+1,u[i]);j++){(g[k][i]+=1ll*power(j,n-r[i])%mod*power(u[i]-j,r[i]-1)%mod)%=mod;y[j]=g[k][i];}if(u[i]>n+1){g[k][i]=lagrange(n+1,u[i]);}g[k][i]=g[k][i]*g[k][i-1]%mod*c(n-k-1,r[i]-1)%mod;}h[k]=g[k][m]*c(n-1,k)%mod;for(int i=k+1;i<=n-1;i++){h[k]=(h[k]-h[i]*c(i,k)%mod)%mod;}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);pre();cin>>n>>m>>k;for(int i=1;i<=m;i++){cin>>u[i];}for(int i=1;i<=m;i++){cin>>r[i];}dp();cout<<(h[k]+mod)%mod<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus 的自动填充 —— 值为null

MyBatis-Plus 的自动填充 MyBatis-Plus 提供的字段自动填充功能是一种非常实用的特性,它能够在插入或更新数据库记录时自动填充一些公共字段,如创建时间(createTime)、更新时间(updateTime)、创建人(createBy)、更新人(updateBy)等。这一功能极大地简化了开发过程,减…

[Jaav SE/程序生命周期] 优雅的Java应用程序的启停钩子框架

序了解 spring 生态及框架的 java er 都知道,spring 应用的生命周期管理及配套接口较为优雅、可扩展。但脱离 spring 的 java 应用程序,如何优雅地启停、管理程序的生命周期呢?(以便应用程序在我们需要的运行阶段中进行相应的动作)概述:Java普通应用程序的启停钩子框架 前…

迈金C416码表体验

之前一直在用黑鸟单车和小米健康记录骑行数据, 后来又发现strava和keep的骑行分享功能做的比较好. 于是使用的运动app就越来越多, 骑行时带着手机的同时还要开好几个app太麻烦了, 同时也想给车上加一个速度显示器, 由此考虑入一个码表.对功能要求不高, 最主要的需求是gps和速度…

ASP.NET Core Swagger 汉化

在wwwroot文件夹添加汉化的JS文件const translations = {"Failed to load API definition": "API定义加载失败","Errors": "错误信息","Hide": "隐藏","Fetch error": "获取错误","Inte…

Svelte 最新中文文档教程(17)—— 生命周期钩子

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

[Java SE] FunctionInterface 注解: 函数式接口(JDK8+)

概述:FunctionInterface/函数式接口 简介函数式接口是指只包含一个抽象方法的接口,可以使用 Lambda 表达式来创建该接口的实例。@FunctionalInterface 注解是 Java Lang 包中的一个注解,用于标识一个接口是函数式接口。@FunctionalInterface 注解的作用:编译时检查:@Funct…

去中心化 AI:赋权还是混乱?

DeepSeek 如何在 AI 去中心化方面迈出了巨大的一步,以及为什么这比你想象的更重要Nadia Piet + AIxDESIGN & Archival Images of AI / Better Images of AI / AI Am Over It / CC-BY 4.02025 年 1 月 27 日星期一,DeepSeek —— 一家几乎凭空冒出来的中国初创公司 —— 发…

SmolLM2:多阶段训练策略优化和高质量数据集,小型语言模型同样可以实现卓越的性能表现

SmolLM2 采用创新的四阶段训练策略,在仅使用 1.7B 参数的情况下,成功挑战了大型语言模型的性能边界:在 MMLU-Pro 等测试中超越 Qwen2.5-1.5B 近 6 个百分点 数学推理能力(GSM8K、MATH)优于 Llama3.2-1B 在代码生成和文本重写任务中展现出色表现 支持 8K tokens 的长文本处…

2025.2.23 (java的学习)

。。。昨天星期六一整天都没学习。。做了一个哆啦a梦。✌附一个目前弄的哆啦a梦全家桶吧。

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1:先旋转再平移 p_cam = T_car2Cam * p_car + T_car2Cam 需要注意的是,这里的平移矩阵T_car2Cam是车身坐…

8-2 MySQL 索引的设计原则(超详细说明讲解)

8-2 MySQL 索引的设计原则(超详细说明讲解) @目录8-2 MySQL 索引的设计原则(超详细说明讲解)1. 测试数据准备2. 哪些情况适合创建索引2.1 字段的数值有唯一性的限制2.2 频繁作为 WHERE 查询条件的字段2.3 经常 GROUP BY 和 ORDER BY 的列2.4 UPDATE、DELETE 的 中的WHERE 条件列…

北京时间同步

本地时间与北京时间 同步 参考:https://blog.csdn.net/qq_46092061/article/details/128748789 本地显示秒数while True:current_time = time.strftime("%H:%M:%S")if current_time >= "19:59:59":print("start")breaktime.sleep(0.5) # 减…