题解:洛谷 P10112 [GESP202312 八级] 奖品分配
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P10112 [GESP202312 八级] 奖品分配 - 洛谷【题目描述】班上有N NN名同学学号从0 00到N − 1 N-1N−1。有M MM种奖品要分给这些同学其中第i ii种奖品总共有a i a_iai​个i 0 , 1 , ⋯ , M − 1 i0,1, \cdots ,M-1i0,1,⋯,M−1。巧合的是奖品的数量不多不少每位同学都可以恰好分到一个奖品且最后剩余的奖品不超过1 11个即N ≤ a 0 a 1 ⋯ a M − 1 ≤ N 1 N\le a_0a_1 \cdots a_{M-1}\le N1N≤a0​a1​⋯aM−1​≤N1。现在请你求出每个班级礼物分配的方案数所谓方案指的是为每位同学都分配一个种类的奖品。只要有一位同学获得了不同种类的奖品即视为不同的方案。方便起见你只需要输出方案数对10 9 7 10^{9}71097取模后的结果即可。共有T TT个班级都面临着奖品分配的问题你需要依次为他们解答。【输入】第一行一个整数T TT表示班级数量。接下来T TT行每行若干用单个空格隔开的正整数。首先是两个正整数N , M N,MN,M接着是M MM个正整数a 0 , a 1 . . . a M − 1 a_0,a_1...a_{M-1}a0​,a1​...aM−1​。保证N ≤ a 0 a 1 ⋯ a M − 1 ≤ N 1 N \le a_0a_1\cdotsa_{M-1} \le N1N≤a0​a1​⋯aM−1​≤N1。【输出】输出T TT行每行一个整数表示该班级分配奖品的方案数对10 9 7 10^{9}71097取模的结果。【输入样例】3 3 2 1 2 3 2 1 3 5 3 1 3 1【输出样例】3 4 20【核心思想】问题分析给定N NN名同学和M MM种奖品第i ii种奖品有a i a_iai​个。每位同学恰好分到一个奖品剩余奖品不超过1 11个即∑ a i N \sum a_i N∑ai​N或N 1 N1N1。求分配方案数对10 9 7 10^971097取模。这是一个多重集排列问题核心在于将为每位同学分配奖品种类转化为将N NN个位置分配给M MM种颜色的组合计数。算法选择组合数递推预处理 乘法原理预处理组合数C ( n , k ) C(n,k)C(n,k)然后按顺序为每种奖品选择位置利用乘法原理累乘方案数关键步骤预处理组合数C ( i , j ) C ( i − 1 , j ) C ( i − 1 , j − 1 ) m o d ( 10 9 7 ) C(i,j) C(i-1,j) C(i-1,j-1) \bmod (10^97)C(i,j)C(i−1,j)C(i−1,j−1)mod(1097)处理每个测试用例读入N NN、M MM和a [ 1.. M ] a[1..M]a[1..M]计算总奖品数s u m ∑ a i sum \sum a_isum∑ai​确定初始可用位置数t tt若s u m N sum NsumN则t N 1 t N1tN1否则t N t NtN按顺序分配位置i ii从1 11到M MM从t tt个位置中选a i a_iai​个放第i ii种奖品a n s ← a n s × C ( t , a i ) m o d ( 10 9 7 ) ans \leftarrow ans \times C(t, a_i) \bmod (10^97)ans←ans×C(t,ai​)mod(1097)更新可用位置t ← t − a i t \leftarrow t - a_it←t−ai​输出a n s ansans时间/空间复杂度时间复杂度O ( N m a x 2 T ⋅ M ) O(N_{max}^2 T \cdot M)O(Nmax2​T⋅M)预处理组合数O ( N m a x 2 ) O(N_{max}^2)O(Nmax2​)每个测试用例O ( M ) O(M)O(M)空间复杂度O ( N m a x 2 ) O(N_{max}^2)O(Nmax2​)组合数表多重集排列与组合数的核心思想位置选择模型将N NN名同学视为N NN个不同位置分配奖品等价于为每种奖品选择对应数量的位置。第i ii种奖品有a i a_iai​个从剩余t tt个位置中选a i a_iai​个方案数为C ( t , a i ) C(t, a_i)C(t,ai​)乘法原理的适用性各种奖品的位置选择相互独立选定一种奖品的位置后剩余位置给下一种总方案数为各步方案数的乘积剩余奖品的处理当s u m N 1 sum N1sumN1时总奖品比人数多1 11意味着有1 11个奖品不分配。此时初始位置数t N 1 t N1tN1最后会剩余1 11个位置即1 11个奖品不分配自然地处理了剩余不超过1 11的约束组合数的对称性C ( t , a i ) C ( t , t − a i ) C(t, a_i) C(t, t-a_i)C(t,ai​)C(t,t−ai​)选择a i a_iai​个位置放该奖品等价于选择t − a i t-a_it−ai​个位置不放该奖品两种视角等价适用于多重集排列、分步计数、组合数应用类问题【解题思路】【算法标签】#普及 #排列组合【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglong// 将int宏定义为long long防止组合数计算溢出constintN1005;// 定义最大数组大小常量N为1005constintmod1e97;// 定义模数mod为1e97intT,n,m;// T为测试用例数n为同学人数总位置数m为奖品种类数inta[N];// a[i]为第i种奖品的数量intc[N][N];// 组合数表c[n][m]即C(n,m)intans,sum;// ans为当前测试用例的答案sum为所有奖品数量的总和// 初始化组合数表杨辉三角法预处理voidinit(){for(inti0;iN;i)// 枚举n从0到N-1{for(intj0;ji;j)// 枚举m从0到n{if(j0){c[i][j]1;// 边界条件C(i,0)1}else{// 组合数递推公式C(i,j)C(i-1,j)C(i-1,j-1)对mod取模c[i][j](c[i-1][j]c[i-1][j-1])%mod;}}}}signedmain()// 使用signed main是因为#define int long long后main返回值类型需要显式声明{// 预处理组合数表init();// 读入测试用例数cinT;while(T--)// 循环处理每个测试用例{// 读入同学人数n和奖品种类数mcinnm;// 初始化奖品总数为0sum0;// 读入每种奖品的数量for(inti1;im;i)// 循环读入m种奖品{cina[i];// 读入第i种奖品的数量a[i]suma[i];// 累加计算所有奖品的总数}// 初始化答案为1乘法单位元ans1;intt;// t为当前剩余可用位置数// 计算初始可用位置数if(sumn){tn1;// 如果奖品总数超过n说明有1个奖品剩余可用位置为n1}else{tn;// 如果奖品总数等于n可用位置恰好为n}// 计算排列方案数依次从剩余位置中为每种奖品选择放置位置for(inti1;im;i)// 枚举每种奖品{// 从t个可用位置中选择a[i]个位置放第i种奖品ans(ans*c[t][a[i]])%mod;// 累乘组合数对mod取模// 减少可用位置数已放置a[i]个奖品t-a[i];}// 输出当前测试用例的方案数coutansendl;}return0;}【运行结果】3 3 2 1 2 3 3 2 1 3 4 5 3 1 3 1 20

相关新闻

如何把 Windows 11 任务栏移到左侧(官方快捷方法)

如何把 Windows 11 任务栏移到左侧(官方快捷方法)

Windows 11 面世已久,早已融入百万用户的日常,帮他们打理各种计算需求;只不过它重新设计的任务栏图标把开始菜单摆到了正中间,打破了 Windows 延续 25 年的传统。如果你想把任务栏挪回左侧、放回它该在的地方,好消息是:微软内置了一个官方设置,改起来大约 15 秒。 不过…

2026/10/12 2:25:22 阅读更多 →
题解:洛谷 P1118 [USACO06FEB] Backward Digit Sums G/S

题解:洛谷 P1118 [USACO06FEB] Backward Digit Sums G/S

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

2026/10/12 2:25:22 阅读更多 →
【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

1. 引言 近期,Meta Muse 智能体在 AI 领域引发广泛关注,开发者、创作者与科技从业者纷纷展开讨论。许多初次接触者不禁疑惑:这是 Meta 推出的又一款大模型?抑或仅是蹭热度的 AI 玩具? 事实并非如此。Meta Muse 是 Meta 在 AI 智能体方向的一次战略性布局,它并非简单的对…

2026/10/12 2:24:22 阅读更多 →

最新新闻

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 3:19:56 阅读更多 →
柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

简介:《全球与中国柔性上料盘市场现状及未来发展趋势(2024版)》是一份QYResearch出品的专业市场研究报告,面向柔性上料与自动化产线设备从业者、工业机器人厂商、市场分析师及投资研究人员。报告以2019至2023年为历史期、2024至20…

2026/10/12 3:19:56 阅读更多 →
WiFi分析工具设计实战:从数据采集到信道优化与故障排查

WiFi分析工具设计实战:从数据采集到信道优化与故障排查

1. 从一个标题说起:这个工具到底在解决什么问题第一次看到“Jev powered WiFi analysis tool”这个标题,我的直觉是:这大概率是一个把无线网络分析能力封装成轻量级工具的项目,名字里的“Jev”可能是作者自定的代号、模块名或者某…

2026/10/12 3:19:56 阅读更多 →
SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

做个人项目这些年,前后端分离的练手项目做了不少,但每次有人让我推荐一个既能完整跑起来、又能覆盖主流开发流程的学习项目,我第一反应往往是这套美食网站系统。为什么?因为它的技术选型非常贴近当下中小型项目的真实组合&#xf…

2026/10/12 3:19:56 阅读更多 →
高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

线性方程组这东西,刚接触数值计算的时候,总觉得不是事——高斯消元一把梭,n100也就是眨眨眼的事。可等你真在工程里碰到几十万未知量、矩阵非零元稀稀落落排成带状或块状的时候,直接法的“快”就变成了一种幻觉:要么内…

2026/10/12 3:19:56 阅读更多 →
attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

后端 【免费下载链接】attrs Python Classes Without Boilerplate 项目地址: https://gitcode.com/gh_mirrors/at/attrs 点击查看 免费下载 本文围绕 attrs 官方文档 docs/comparison.md 展开,系统讲解 attrs 类实例的相等性(equality&#…

2026/10/12 3:18:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →