【BZOJ4559】【JLOI2016】—成绩比较(拉格朗日插值+dp)

传送门


dpdpdp
f[i][j]f[i][j]f[i][j]表示前iii门课,有jjj个人没有被碾压的方案数

考虑f[i−1][j]f[i-1][j]f[i1][j]转移到f[i][w](j≤w)f[i][w](j\le w)f[i][w](jw)
首先要选出w−jw-jwj个新的没被他碾压的人
由于之前已经有一些没被碾压的人,所以方案数为(n−i+1w−j){n-i+1\choose w-j}(wjni+1)
还有Ri−1−w+jR_i-1-w+jRi1w+j个人是本来就没有被碾压的,从原来没被碾压得人中选,方案数为(Ri−1−w+jj){R_i-1-w+j\choose j}(jRi1w+j)
这些人组成了排名比他高的

再考虑每一课内,枚举当前分数xxx,则有(U−x)R−1∗xn−R(U-x)^{R-1}*x^{n-R}(Ux)R1xnR种情况
g(i)=∑x=1Ui(Ui−x)Ri−1∗xn−Rig(i)=\sum_{x=1}^{U_i}(U_i-x)^{R_i-1}*x^{n-R_i}g(i)=x=1Ui(Uix)Ri1xnRi

dpdpdp转移:f[i][w]=g(i)(n−i+1w−j)(Ri−1−w+jj)f[i−1][j]f[i][w]=g(i){n-i+1\choose w-j}{R_i-1-w+j\choose j}f[i-1][j]f[i][w]=g(i)(wjni+1)(jRi1w+j)f[i1][j]
但是UUU太大,无法直接枚举
考虑∑x=1U(U−x)R−1\sum_{x=1}^{U}(U-x)^{R-1}x=1U(Ux)R1可以看做关于UUURRR次方多项式
也就是不超过nnn次多项式
拉格朗日插值就可以了

复杂度O(n3)O(n^3)O(n3)

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<21|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;
} 
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define mp make_pair
#define bg begin
#define re register
const int mod=1e9+7,g=3;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
inline void Add(int &a,int b){a=a+b>=mod?a+b-mod:a+b;}
inline int dec(int a,int b){return a>=b?a-b:a-b+mod;}
inline void Dec(int &a,int b){a=a>=b?a-b:a-b+mod;}
inline int mul(int a,int b){return 1ll*a*b>=mod?1ll*a*b%mod:a*b;}
inline void Mul(int &a,int b){a=mul(a,b);}
inline int ksm(int a,int b,int res=1){for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline void chemx(int &a,int b){a>b?0:a=b;}
inline void chemn(int &a,int b){a<b?a=b:0;}
const int N=105;
int u[N],r[N],fac[N],pf[N][N],n,m,k,f[N][N];
int c[N][N];
inline void init(){for(int i=0;i<N;i++){c[i][0]=c[i][i]=1;for(int j=1;j<i;j++)c[i][j]=add(c[i-1][j],c[i-1][j-1]);}pf[0][0]=1;for(int i=1;i<N;i++){pf[i][0]=1,pf[i][1]=i;for(int j=2;j<N;j++)pf[i][j]=mul(pf[i][j-1],i);}fac[0]=1;for(int i=1;i<N;i++)fac[i]=mul(fac[i-1],i);
}
inline int calc(int u,int r){static int y[N];memset(y,0,sizeof(y));for(int i=1;i<=n+1;i++){for(int j=1;j<=i;j++)Add(y[i],mul(pf[i-j][r-1],pf[j][n-r]));if(i==u)return y[i];}int res=0;for(int i=1;i<=n+1;i++){int tmp=mul(fac[i-1],fac[n-i+1]);Mul(tmp,dec(u,i));if((n-i+1)&1)Mul(tmp,dec(0,1));tmp=ksm(tmp,mod-2),Mul(tmp,y[i]),Add(res,tmp);}for(int i=1;i<=n+1;i++)Mul(res,dec(u,i));return res;
}
inline int C(int i,int j){return (i<0||j<0||i<j)?0:c[i][j];
}
int main(){init();n=read(),m=read(),k=read();for(int i=1;i<=m;i++)u[i]=read();for(int i=1;i<=m;i++)r[i]=read();f[0][0]=1;for(int i=1;i<=m;i++){int g=calc(u[i],r[i]);for(int j=0;j<=n;j++)for(int k=j;k<=n;k++)Add(f[i][k],mul(mul(g,f[i-1][j]),mul(C(j,r[i]-1-k+j),C(n-j-1,k-j))));}cout<<f[m][n-k-1];
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/11145532.html

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

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

相关文章

中兴通讯 基于定位的技术和市场分析

中兴通讯 基于定位的技术和市场分析 (2004-08-10 09:04:27) 8月5日&#xff0c;由中国联通和中兴通讯联合举办的“中国联通位置业务研讨会”在海口举行。中国联通总部及多个省的分公司领导&#xff0c;应用中兴通讯PN4747定位系统开展定位业务的多家集团客户代表以及华好…

第八十三期:这些高性能负载均衡架构知识点,90%的人分不清!

单服务器无论如何优化&#xff0c;无论采用多好的硬件&#xff0c;总会有一个性能天花板&#xff0c;当单服务器的性能无法满足业务需求时&#xff0c;就需要设计高性能集群来提升系统整体的处理性能。 作者&#xff1a;马天池 单服务器无论如何优化&#xff0c;无论采用多好…

15. 3Sum-数组

文章目录1题目理解2 排序双指针1题目理解 输入&#xff1a;int数组nums 规则&#xff1a;查找数组中任意三个数的和等于0 输出&#xff1a;符合条件的解&#xff0c;不包含重复的解 例子&#xff1a; nums [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1…

第八十四期: Java、Web 和移动程序员学习的 12 个框架

今天的文章中&#xff0c;我将分享一些你可以学习的框架&#xff0c;以提升你在移动和Web开发以及大数据技术方面的知识。 作者&#xff1a;芒果教你学编程 在今天的文章中&#xff0c;我将分享一些你可以学习的框架&#xff0c;以提升你在移动和Web开发以及大数据技术方面的…

关于mysql无法添加中文数据的问题以及解决方案

所有能设置的地方我都设置了&#xff0c;都设置的是ut8。然后&#xff0c;我执行了一下insert语句&#xff0c;报错了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 这个错误纠结了一天&#xff0c;最后&#xff0c;看到…

第八十五期:一文彻底搞懂cookie和session

在Web发展史中&#xff0c;我们知道浏览器与服务器间采用的是 http协议&#xff0c;而这种协议是无状态的&#xff0c;所以这就导致了服务器无法知道是谁在浏览网页&#xff0c;所以为了解决这一问题&#xff0c;先后出现了四种技术&#xff0c;分别是隐藏表单域&#xff0c;UR…

141. Linked List Cycle

文章目录1 题目理解2 分析13 分析21 题目理解 输入&#xff1a;一个单向链表。 输出&#xff1a;如果链表中有环&#xff0c;输出true。否则输出false。 规则&#xff1a;单向链表只能向前移动。 2 分析1 可以把节点放入map中&#xff0c;不断遍历。如果碰到已经遍历的节点&…

Microsoft Updater Application Block 1.5.3 服务器端manifest文件设计 [翻译]

Microsoft Updater Application Block 服务器端manifest文件设计 译者&#xff1a;Tony Qu Manfest文件用于列出一次升级所需要的所有的文件&#xff0c;它与验证签名相关联&#xff0c;验证签名可用于验证manifest文件的真实性。这个将介绍应用程序升级器的以下几个方面&#…

第八十六期:“程序员锁死服务器导致公司倒闭”案正式开庭审理

11 月 1 日&#xff0c;据微博网友爆料&#xff0c;此前程序员锁死服务器致创业游戏公司倒闭一案已经开庭审理&#xff0c;公司创始人“螃了个蟹” 提交了对方莫名失联&#xff0c;跑路的证据。 作者&#xff1a;51CTO 11 月 1 日&#xff0c;据微博网友爆料&#xff0c;此前…

delphi 参数化sql

曾经查过资料&#xff0c;后来忘了&#xff0c;现在做一下记录。 --------- 在 sql 语句里占位使用 一个冒号和一个用来表示这个位置的符号, 例如&#xff1a;SELECT * FROM aTableName WHERE aCol :ColVal SELECT * FROM aTableName WHERE aCol :ColVal 对占位了的地方赋值…

20 Valid Parentheses

1 题目理解 输入&#xff1a;一个字符串s&#xff0c;只包含( ) { } [ ]这六种字符。 输出&#xff1a;字符串是否有效 规则&#xff1a;一个有效的字符串需要括号对应匹配&#xff0c;并且要左括号在前。 举例&#xff1a; 1 输入s"()"&#xff0c;输出true 2 Inpu…

SQL select 语法(转)

SQL 里面最常用的命令是 SELECT 语句&#xff0c;用于检索数据。语法是&#xff1a; SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]* | expression [ AS output_name ] [, ...][ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ][ FROM from_item [, ...] ][ WHER…

spring mvc学习(9):路径参数

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

mysql函数(五.流程控制函数)

流程控制函数 1.IF(expr1,expr2,expr3) 判断条件的正误&#xff0c;返回对应值 (1)判断条件的正返回expr2&#xff0c;否则返回expr3 select IF(10>5,大于,小于) as result; 结果&#xff1a;大于 2.IFNULL(expr1,expr2) 判断值是否为空 (1)判断值为空返回expr2&#x…

扩展String类

因为.Net Framework中的String类是封闭的&#xff0c;所以我们不能从它进行派生来扩展它的功能。 虽然String类已经提供了很多有用的方法来让我们进行字符串的处理和操作&#xff0c;但是有时候一些特殊的的要求还是不能能到满足。 一个例子就是&#xff1a;假如有一个因为句…

150 Evaluate Reverse Polish

1题目理解 输入&#xff1a;一个字符串数组。这个字符串数组表示算数运算的逆波兰表示法。一般算数表示方法是21&#xff0c;逆波兰表示是2 1 。 输出&#xff1a;一个int值。 Example 1: Input: [“2”, “1”, “”, “3”, “*”] Output: 9 Explanation: ((2 1) * 3) …

第八十七期:爬了知乎“沙雕问题”,笑死个人!

这两天偶然上网的时候&#xff0c;被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引。 作者&#xff1a;数据森麟 这两天偶然上网的时候&#xff0c;被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引。 图片来自 Pexels 本以为只是小打小闹&#xf…

django的url控制系统

无命名分组 &#xff08;\d{4}&#xff09; 有命名分组 &#xff08;&#xff1f;P<name>\d{4}&#xff09; 一个视图做两件事&#xff0c;提交方法不一样&#xff08;if 判断&#xff09; form action"/register/" django默认添加了当前面IP和端口 url别名…

641. Design Circular Deque

1 题目理解 要求设计一个双端循环队列。这个队列能支持以下操作&#xff1a; MyCircularDeque(k): Constructor, set the size of the deque to be k. insertFront(): Adds an item at the front of Deque. Return true if the operation is successful. insertLast(): Adds a…

QQ技术攻略-原来隐藏着这么多秘密(上)

一、将您的QQ的在线状态发布在互联网上将您的QQ的在线状态发布在互联网上&#xff0c;不用加好友也可以聊天.将您的QQ/TM的在线状态发布在互联网上&#xff1b;点击 QQ在线&#xff0c;不用加好友也可以聊天&#xff1b;寻找商机&#xff0c;广交朋友&#xff0c;"互动状态…