题目传送门。

看了题解才发现我有多蠢。

我的做法真是唐完了。

在此之前请学习扩展欧几里得定理和扩展欧几里得定理求逆元。

发现奖品要么 \(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 八级] 奖品分配 题解的更多相关文章

  1. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  2. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  3. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  4. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  5. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

  6. 洛谷1578:[WC2002]奶牛浴场——题解

    https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...

  7. 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)

    科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...

  8. 洛谷 P1146 【硬币翻转】题解

    很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...

  9. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

  10. 洛谷 p1352 没有上司的舞会 题解

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

随机推荐

  1. 对象存储 AVIF 图片压缩,邀您参与免费内测!

    对象存储 AVIF 图片压缩免费内测正式开放!AVIF 作为压缩图片中的新主力军,都有哪些特点呢?通过对象存储又要如何使用 AVIF 压缩呢?这篇文章将深入浅出的为您介绍~ ​具体介绍 现在硬件设备越 ...

  2. Python Tkinter 弹窗美化指南

    在Python编程中,Tkinter是标准GUI(图形用户界面)库,它允许开发者创建桌面应用程序.尽管Tkinter提供了基本的窗口和控件功能,但默认的样式和外观往往显得单调.因此,对Tkinter弹 ...

  3. Zstd-数据压缩组件

    Zstandard 简称Zstd,是一款快速实时的开源数据压缩程序,由Facebook开发,源码是用C语言编写的.相比业内其他压缩算法(如Gzip.Snappy.Zlib)它的特点是:当需要时,它可以 ...

  4. JVM实战—2.JVM内存设置与对象分配流转

    大纲 1.JVM内存划分的原理细节 2.对象在JVM内存中如何分配如何流转 3.部署线上系统时如何设置JVM内存大小 4.如何设置JVM堆内存大小 5.如何设置JVM栈内存与永久代大小 6.问题汇总 ...

  5. Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道

    一.前言 对各种音视频文件格式的支持,是一个播放器的基础功能.一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路 ...

  6. Qt编写地图综合应用51-离线瓦片地图下载

    一.前言 写这个离线地图下载器的初衷,就是为了方便自己的几个需要离线地图的程序,客户需求,既然地图程序已经可以支持离线地图,那如何获取到这些离线瓦片地图文件是个关键,而且这是这个功能的关键,拿到这些一 ...

  7. Qt编写安防视频监控系统53-串口配置

    一.前言 视频监控系统中,除了核心的显示实时视频以外,可能还需要配合串口网络通信之类的,用于通过指令数据收到和硬件交互,比如机器人监控系统中,除了实时显示机器人移动监控画面以外,还通过多个串口和下面的 ...

  8. 循规蹈矩--从零开始建设k8s监控(一)

    前言 监控k8s集群,目前主流就是使用prometheus以及其周围的生态,本文开始介绍怎么一步步完成k8s监控的建设 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS minik ...

  9. [转]GMM:高斯混合模型讲义(台湾)

  10. LetsTalk_Android中引导用户加入白名单图-2

    =================================================================== ================================ ...