洛谷P10112 [GESP202312 八级] 奖品分配 题解
题目传送门。
看了题解才发现我有多蠢。
我的做法真是唐完了。
在此之前请学习扩展欧几里得定理和扩展欧几里得定理求逆元。
发现奖品要么 \(N\) 个,要么 \(N+1\) 个,于是分类讨论,当奖品只有 \(N\) 个的时候,显然所有奖品都要分给学生,那相当于有 \(N!\) 种分法,但是你会发现有重复部分,实际上比如奖品 \(2\) 号有两个,奖品 \(1\) 号只有一个,奖品 \(3\) 号有三个,那么其实只有 \(\frac{6!}{2! \times 3!}\) 种分法,所以分法数量就是 \(\frac{(\sum_{i = 1}^m a_i)!}{\prod_{i = 1}^m (a_i!)}\),由于答案会很大,需要取模,所以我们要求出每个 \(a_i!\) 在模 \(10^9+7\) 意义下的逆元,然后拿 \(N!\) 乘上每个 \(a_i\) 的逆元。然后第二种情况是有 \(N+1\) 个奖品,其实你会发现没啥区别,我们只需要枚举哪个奖品的其中一个不选(因为一个奖品可能会有很多个),其它的都选不就行了吗,当然,原本我们计算的是所有奖品都选的方案数,\(x\) 这个奖品的其中一个不选的话我们会发现我们求的答案多除了一个 \(a_x\),所以每次我们只需拿 \((N+1-1)!\) 乘 \(a_x\) 就行了(减 \(1\) 是因为我们应该选 \(N\) 个奖品,但是总共有 \(N+1\) 个奖品,前面为了方便理解才说求的是所有奖品都选的方案数,但是为了让代码更好写,还是减 \(1\) 比较好,当然你可以不减 \(1\),然后每次枚举的答案再除以 \(N+1\) 就行了)。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3+5;
const int mod = 1e9+7;
int x,y;
int a[N];
void exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x = 1;
y = 0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
int jie[N];
int fac[N];
signed main()
{
jie[0] = 1;
for(int i = 1;i<=1001;i++)
{
jie[i] = jie[i-1]*i%mod;
}
for(int i = 0;i<=1001;i++)
{
exgcd(jie[i],mod,x,y);
x = (x%mod+mod)%mod;
fac[i] = x;
}
int _;
scanf("%lld",&_);
while(_--)
{
int n,m;
scanf("%lld %lld",&n,&m);
int sum = 0;
for(int i = 1;i<=m;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
}
if(sum == n+1)
{
int num = jie[sum-1],ans = 0;
for(int i = 1;i<=m;i++)
{
num = num*fac[a[i]]%mod;
}
for(int i = 1;i<=m;i++)
{
ans = (ans+num*a[i]%mod)%mod;
}
printf("%lld\n",ans);
}
else
{
int ans = jie[sum];
for(int i = 1;i<=m;i++)
{
ans = ans*fac[a[i]]%mod;
}
printf("%lld\n",ans);
}
}
return 0;
}
好愚蠢的复杂办法啊,如果大家想看更简单的做法,戳这里(毕竟这题才黄题,扩展欧几里得的模版都绿了)。
洛谷P10112 [GESP202312 八级] 奖品分配 题解的更多相关文章
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
- 洛谷1578:[WC2002]奶牛浴场——题解
https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...
- 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...
- 洛谷 P1146 【硬币翻转】题解
很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- 洛谷 p1352 没有上司的舞会 题解
P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...
随机推荐
- PDFSharp - Graphics
PDFSharp - Graphics Graphics - PDFsharp and MigraDoc Wiki 所有的 Graphics 类型都设计成模仿来自 System.Drawing 命名空 ...
- 中电金信成为开源风险评估与治理技术实验室软件物料清单(SBOM)工作组成员单位
近期,中电金信成功加入国家工业信息安全发展研究中心开源风险评估与治理技术实验室软件物料清单(SBOM)工作组,成为其成员单位,并同步加入"筑链计划"之中. SBOM是Softwar ...
- 运筹帷幄,质效兼修:源启云原生基础设施管理平台助推企业IT基础资源能效跃迁
导语 数字化大潮席卷,企业需要建设一套能够满足云原生环境下基础资源一体化管理和快速交付的基础设施自动化管理系统,系统需要具备"云上""云下""容器&q ...
- 基于SpringMVC XML配置文件的Dubbo开发与使用
[模块一] 首先引入Dubbo的依赖资源,这里我们使用基于SpringMVC的项目于Dubbo进行整合 先进行依赖导入. pom.xml <!--zookeeper--> ...
- java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
一.概述 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位.目前主要使用公开的SM2.SM3.SM4三类算法,分别是非对称算法.哈希算法和对称算 ...
- Linux系统手动安装Firefox浏览器
大多数Linux发行版都以Firefox作为默认的浏览器,并可以轻松地从软件库中安装.例如:Debian/Ubuntu: sudo apt-get install firefoxFedora: sud ...
- Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本
一.功能特点 广播搜索设备,支持IPC和NVR,依次返回. 可选择不同的网卡IP进行对应网段设备的搜索. 依次获取Onvif地址.Media地址.Profile文件.Rtsp地址. 可对指定的Prof ...
- Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)
一.前言 由于Qt版本众多,几百个版本之间存在不兼容的情况,为此如果要兼容很多版本,没有取巧的办法和特殊的捷径,必须自己亲自安装各个版本编译运行并测试,大问题一般不会有,除非缺少模块,小问题还是不断有 ...
- Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)
1.引言 IM在Android上的保活问题经常在即时通讯网的论坛和技术群里被讨论,自从Android 8.0后系统大大降低了后台运行应用的保活容忍度(详见<Android P正式版即将到来:后台 ...
- 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-9- 浏览器的相关操作 (详细教程)
1.简介 在自动化测试领域,元素定位是非常重要的一环.正确定位页面元素是测试用例能否成功执行的关键因素之一.playwright是一种自动化测试工具,它提供了丰富的元素定位方法,可以满足不同场景下的定 ...