JZOJ-senior-5968. 电竞选手

2023-11-23 16:30
文章标签 jzoj 竞选 senior 5968

本文主要是介绍JZOJ-senior-5968. 电竞选手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Time Limits: 1000 ms Memory Limits: 262144 KB

Description

在这里插入图片描述

Input&Output

在这里插入图片描述

Sample Input&Sample Output

在这里插入图片描述
在这里插入图片描述

Data Constraint

在这里插入图片描述

Solution

显然顺序不影响答案,先从小到大排序,相同的数称作同一块
费用最少,肯定是块内相同的数相消,然后不同块之间消1次
f i f_i fi 表示将当前块的数消剩 i i i 个的方案,则 f i = f i + 1 ∗ ( i + 1 ) ∗ i 2 f_i=f_{i+1}*\frac{(i+1)*i}{2} fi=fi+12(i+1)i
设前面有 s s s 个二元组(定义与样例相同),当前块的大小为 x x x
设当前块与前一块相消的二元组为 ( p , q ) (p,q) (p,q) ,其中 p p p 已经确定,而 q q q 还未确定
枚举一个 k k k 表示从当前块的二元组里选择 k k k 组放到 ( p , q ) (p,q) (p,q) 前面
由于 q q q 只能为当前块内没被消掉的位置
所以有 a n s ∗ = f [ 1 ] ∗ ( ∑ k = 1 x − 1 C s + k − 1 k ∗ ( x − k ) ) ans*=f[1]*(\sum_{k=1}^{x-1}{C_{s+k-1}^k}*(x-k)) ans=f[1](k=1x1Cs+k1k(xk))
(好像和标不同……不要在意)

Code

#include<algorithm>
#include<cstring>
#include<cstdio>#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fd(i,a,b) for(int i=a;i>=b;--i)
#define ll long longusing namespace std;const int N=1e5+5,P=1e9+7;
int n,s,tot,ans=1;
int a[N],b[N],f[N],jc[N],ny[N];int ksm(int a,int b)
{int s=1;for(;b;a=(ll)a*(ll)a%P,b>>=1)if(b&1) s=(ll)s*(ll)a%P;return s;
}int C(int n,int m)
{return (ll)jc[n]*(ll)ny[m]%P*(ll)ny[n-m]%P;
}int main()
{freopen("out.in","r",stdin);freopen("out.out","w",stdout);scanf("%d",&n);fo(i,1,n) scanf("%d",&a[i]);jc[0]=1;fo(i,1,n) jc[i]=(ll)jc[i-1]*(ll)i%P;ny[n]=ksm(jc[n],P-2);fd(i,n-1,0) ny[i]=(ll)ny[i+1]*(ll)(i+1)%P;f[1]=f[2]=1;fo(i,3,n) f[i]=(ll)f[i-1]*((ll)i*(i-1)/2%P)%P;sort(a+1,a+1+n);b[1]=1,tot=1;fo(i,2,n) if(a[i]==a[i-1]) ++b[tot]; else b[++tot]=1;fo(i,1,tot) ans=(ll)ans*(ll)f[b[i]]%P;s=b[1];fo(i,2,tot) ans=(ll)ans*(ll)C(b[i]+s,b[i]-1)%P,s+=b[i];printf("%d",ans);
}

这篇关于JZOJ-senior-5968. 电竞选手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419242

相关文章

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

BestCoder Round #47 ($) HDU 5280 Senior\'s Array

http://acm.hdu.edu.cn/showproblem.php?pid=5280 考少年——报考杭州电子科技大学计算机学院  Senior's ArrayTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 244

特朗普竞选带火PoliFi,以Bitget为例

以特朗普系列Meme币为代表的政治金融(PoliFi)概念币市场正在掀起热潮,前美国总统特朗普(Donald Trump)在本月稍早公开力挺加密货币,接着又在周二宣布接受比特币、以太币、SOL、USDC、DOGE…等政治献金,让相关通证高涨。 据CoinGecko数据,在特朗普竞选团队周二宣布接受加密货币捐款后,Meme币TRUMP价格单日又上涨近8%,在过去两周涨幅已超过90%

jzoj 5770 可爱精灵宝贝

题目 题解 –是区间dp(好像dfs加神秘玄学剪枝也能过?) 首先,我们可以发现这个人走过的位置是一个区域,而且区域内部的精灵要么被抓,要么消失了(总之就是与以后的转移没有关系) 所以,状态定义: f[l][r][t] :当这个人走过区间[l,r],且目前在l处,时间为t时的最大分值 注意,l,r的左右位置要根据大小自己判断 然后我们又发现,现在这个人只有两种方法:左走或右走

[离散化][区间DP]JZOJ 5770 可爱精灵宝贝

日常黑Pokeman Go Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家。最近,他闲得没事组织了一场捉精灵的游戏。游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n。 刚开始玩家在k号房子前。有m个精灵,第i只精灵在第A[i]栋房子前,分值是B[i],以及它在T[i]秒内(含)存在,之后消失。Branimirko可以选择移动至相邻的房子,耗时

[权值线段树]JZOJ 3236 矮人排队

Description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏。白雪公主决心终结这样的生活,所以为他们举办了体育课。 在每节课开始时,矮人必须按他们的身高站队。假定矮人们有高度1,2,...,N(每个人高度互不相同)。然而,由于不健康的生活方式,矮人的智力有所恶化,所以他们没有能力依照自己的高度排序。 因此,白雪公主发

IBM技术俱乐部主席竞选

IBM技术俱乐部主席竞选 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:510            测试通过:188 描述 今天IBM技术俱乐部举行主席竞选,你的任务是统计谁是得票最多的候选人。 输入 输入数据包含多组测试案例。 每组测试案例由N(0<N<1000)开头,N表示投票总数,后续N行每行包含一个参加主席

<Senior High School Math>: inequality question

( 1 ) . o m i t (1). omit (1).omit ( 2 ) . ( a 2 − b 2 ) ( x 2 a 2 − y 2 b 2 ) = ( x 2 + y 2 ) − ( a 2 y 2 b 2 + b 2 x 2 a 2 ) ≤ x 2 + y 2 − 2 x y = ( x − y ) 2 (2). (a^2-b^2)(\frac{x^2}{a^2} - \f

JZOJ 1495. 宝石(附加扫描线讲解)

JZOJ 1495. 宝石 题目大意:给你N个 ( K + 1 ) × ( K + 1 ) (K+1)\times(K+1) (K+1)×(K+1)的正方形以及他们左上角的那个顶点的坐标和它的权值,求最大的覆盖的权值。 这一题可以用二维前缀和做,但是无法拿到满分。 满分做法:扫描线。 假如现在有这么两个长方形,权值都为1(不要问为什么是长方形,这里只是为了方便讲解而已),它们摆放如图: 首