当前位置: 首页 > news >正文

P3445 TAN-Dancing in Circles Sol

题目链接

前言

前置知识点:卢卡斯定理,威尔逊定理,不会可以百度,这里给出大概内容。

卢卡斯定理:考虑求 \(\binom{n}{k} \mod p\)。则其值等于 \(p\) 进制分解后的组合的乘积。

威尔逊定理:对于任意素数 \(p\),有 \((p-1)! \equiv -1 \pmod p\)

解法

考虑答案的情况为长度为 \(a_1\) 的环 \(k_1\) 个,\(a_2\) 的环 \(k_2\) 个,以此类推,直到 \(m\),且满足 \(a_1 < a_2 < a_3 < \dots < a_n\),同时还有 \(\sum\limits_{i=1}^{m} k_i = K\)

则有答案为 \(\dfrac{n!}{\prod\limits_{i=1}^{m} {(a_i!)}^{k_i} k_i!} \prod\limits_{i=1}^{m} {(a_i-1)!}^{k_i}\)。化简一下,就是 \(\dfrac{n!}{\prod\limits_{i=1}^{m} {a_i}^{k_i} k_i!}\)。这是基础的。

然后看到模数很小,考虑对于模数下手。

由于 \(2005 = 5\times 401\),所以做完 \(5\)\(401\) 后,使用 CRT 就好了。

尝试开发性质。

性质一:\(a_m \le p\)。证明可以通过观察左侧内容得出。

性质二:\(\forall n \ge p,a_m = p\),考虑 \(a_m < p\),发现答案一定为 \(0\)

性质三:考虑应用性质二,因此有:令 \(q = n/p\),则 \(a_m = q\),证明显然。

因此应用性质三。发现方案数为 \(\dbinom{n}{q\cdot p} \dfrac{\prod_{i=1}^{q}\binom{i\times p}{p}}{q!} \times {(p-1)!}^q\)

考虑拆分这个式子,根据卢卡斯定理,可以得到前面一项 \(\equiv 1\),根据威尔逊定理,最后一项 \(\equiv {(-1)}^q\)

然后考虑第二项,不难拆分成 \(\dfrac{\prod_{i=1}^{q} i\cdot \binom{i\times p - 1}{p-1}}{q!}\),然后变成了\(\prod_{i=1}^{q} \binom{i\times p - 1}{p-1}\)。考察这个式子,发现根据卢卡斯定理,同样等于 1

综上,这一大坨式子,本质为 \({(-1)}^q\)

然后,问题就可以转化到非常小的范围内了,可以 DP,不会的可以去问 DS,这里给出大概内容。

\(dp[i][j]\) 表示前 \(i\) 个人,形成了 \(j\) 个大小为 \(k\) 的圈,那么我们就有两种方案,往前面的圈塞东西,或者增加一个新的大小为 \(l\) 的圈。然后直接大力 DP,做完了。

Code

这里需要注意判数组越界,不然容易RE。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
const int N = 405;
LL n,k,l;
LL chs[N],dp[N][N];
LL DP(LL x,LL y,LL mod){memset(dp,0,sizeof dp);// cout << x << " " << y << " " << mod << "\n";for(int i=l;i<=x;i++){chs[i] = 1;for(int j=i-l+1;j<i;j++)chs[i] = chs[i] * j % mod;}dp[0][0] = 1;for(int i=1;i<=y;i++)for(int j=i*l;j<=x;j++){dp[i][j] = dp[i][j-1] * (j-1) + dp[i-1][j-l] * chs[j];dp[i][j] %= mod;}return dp[y][x];
}
LL solve(int p){if(l > p) return 0;if(l * k > n) return 0;int q = n / p;if(q > k) return 0;if((k - q) * l > n % p) return 0;LL res = DP(n%p,k-q,p);if(q & 1) res = (p -res)% p;return res;
}
int main(){IOS;cin >> n >> k >> l;LL ans1,ans2;ans1 = solve(5);ans2 = solve(401);// cout << ans1 << " " << ans2 << "\n";while(ans2 % 5 != ans1)ans2 += 401;ans2 %= 2005;cout << ans2;return 0;
}
http://www.jsqmd.com/news/934665/

相关文章:

  • 别再手动F11了!用Chrome/Edge/Firefox的Kiosk模式,一键打造商场大屏展示系统
  • 当ABAP Web Service遇上Postman:手把手教你调试与测试SAP接口(解决NIECONN_REFUSED错误)
  • 叶绿体基因组深度图还能这么看?用Python+R一键生成带结构注释的覆盖度报告
  • 智能体工作流滥用反思:何时该用,何时不该用?
  • 《珠宝改款定制镶嵌哪家好:排名前五测评》 - 服务品牌热点
  • 手把手教你用RKE离线部署K8s集群,再也不用担心内网没网了(附Rancher 2.5.7集成)
  • 别再只看像素了!聊聊ADAS摄像头选型时,分辨率、帧率与算力、成本的现实博弈
  • 从人机交互到智能体伙伴:下一代交互范式的核心要素与设计挑战
  • 别再只用Matplotlib了!用PyOpenGL和Pygame给你的Python数据可视化加点3D‘魔法’(以太阳系模拟为例)
  • 【2026最新】天虹购物卡回收平台推荐 - 团团收购物卡回收
  • HP服务器Logical Drive状态异常?可能是Smart Array电池的锅!DL360 Gen9更换电池与阵列重建实操记录
  • 告别QTableWidget!用QTableView+自定义Model打造你的Qt表格万能工具箱
  • 从LPDDR5到GDDR6:我们AI芯片选型时踩过的那些坑(附带宽与延迟实测对比)
  • 分层无模型交易控制:如何将建筑负荷变为电网柔性电池
  • 从风筝布到柔性电路:给仿生蝴蝶翅膀加上‘感知’的保姆级教程
  • STM32CubeMX实战:手把手教你复刻蓝桥杯嵌入式省赛真题(LCD+ADC+PWM全解析)
  • 如何构建高效研究周报:从信息管理到知识复利的系统方法论
  • 2026广深沪港靠谱全屋定制品牌评测指南 - 服务品牌热点
  • 从Burp靶场实战到真实渗透:手把手教你挖掘和利用Host头攻击的5种姿势
  • 广东医学成人学历机构排名|零基础在职择校指南 - 服务品牌热点
  • 京东e卡回收技巧:3分钟找到靠谱线上回收平台 - 团团收购物卡回收
  • RuoYi-Cloud项目导入IDEA后,这5个配置不调好,启动绝对报错!(SpringCloud Alibaba实战避坑)
  • KeyboardChatterBlocker终极指南:如何快速修复机械键盘连击问题
  • Linux下可直接运行的Matlab Louvain社区划分工具包(含C++源码与预编译MEX)
  • Sora 2多智能体协同生成实战:从交通流模拟到跨时空叙事,7步落地工业级复杂场景
  • 蓝桥杯电子赛硬件调试避坑指南:从NE555电路仿真到单片机测频代码的全流程验证
  • STAR-RIS毫米波通信系统与绿色学习预编码技术
  • 洛阳市 冰箱维修、冰箱清洗 上门服务|维小达冰箱单门、冰箱双门、冰箱三门、冰箱对开门、冰箱多门、冰箱冰柜一站式维保清洗服务 - 维小达科技
  • 告别倍福开发板:手把手教你用SSC工具为STM32生成EtherCAT从站代码
  • 2026嘉兴GEO优化服务商深度评测与选型避坑指南 - 品牌报告