ICPC 2018 焦作赛区网络预赛G Give Candies 组合数学隔板法+欧拉降幂
G Give Candies
计蒜客 G Give Candies
题意
n n n个糖果, n n n个人从 1 1 1~ n n n编号,每次给一个人发糖可以发任意数量但不能小于 1 1 1,直到发完所有糖果,问分糖果的方案有多少种。
分析
1.首先考虑到会不会有一个人被重复发糖,但最后发现对答案没有影响,因为对同一个人发两次糖每次发一颗 和 一次发两颗对于最后的糖果分配结果来看没有区别。
2.考虑会不会有编号的影响,只要对于任意两个方案,只要有编号相同的人持有不同数量的糖果就视为不同方案,也就是说 n = 4 n = 4 n=4,给一个人发 4 4 4个糖果的方案有四种 即给 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4的某一个发 4 4 4个糖果其他人不发。但样例 n = 4 n = 4 n=4时 a n s = 8 ans = 8 ans=8可以分析出来,编号对方案不造成影响,最后的答案按糖果数量排序后,字典序不同才是不同方案 0 , 0 , 0 , 4 = 0 , 4 , 0 , 0 0,0,0,4 = 0,4,0,0 0,0,0,4=0,4,0,0。
3. 此时可以将问题抽象出来: n n n个糖果将其分成 1 , 2 , … … , n 1,2,……,n 1,2,……,n份的方案数之和,我们采用隔板法。n个糖果共有 n − 1 n - 1 n−1个地方可以插入隔板,插入 0 0 0个隔板是分成 1 1 1组 C n − 1 0 C_{n - 1}^{0} Cn−10,插入 1 1 1个隔板是分成 2 2 2组 C n − 1 1 C_{n - 1}^{1} Cn−11,……
a n s = ∑ i = 0 n − 1 C n − 1 i = 2 n − 1 ans = \sum_{i = 0}^{n - 1} C_{n - 1}^{i} = 2^{n - 1} ans=∑i=0n−1Cn−1i=2n−1
4.但是 n n n的数据较大 n < = 1 0 100000 n <= 10^{100000} n<=10100000 普通的递推和快速幂都无法满足于是我们需要使用欧拉降幂,将指数的幂降下去,再用快速幂求解。
欧拉降幂结论: ( a b ) m o d p = ( a b m o d ( p − 1 ) ) m o d p (a ^ b) \mod p = (a ^ {b \mod (p - 1)}) \mod p (ab)modp=(abmod(p−1))modp 当且仅当 a a a 与 p p p互质。
代码
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
const int N = 100010;
const int p = 1000000006;//mod - 1
const int mod = 1000000007;//mod
char num[N];
ll ksm(ll a,ll b)
{ll ans = 1;while(b){if(b & 1) ans = ans * a % mod;a = a * a % mod;b >>= 1;}return ans;
}
void solve()
{scanf("%s",num);int len = strlen(num);ll mi = 0;for(int i = 0; i < len; i ++){mi = mi * 10 % p;mi = (mi + num[i] - '0') % p;//降幂}mi = (mi + p - 1) % p;printf("%lld\n",ksm(2, mi));return ;
}
int main()
{int T;scanf("%d",&T);while(T--)solve();return 0;
}
ICPC 2018 焦作赛区网络预赛G Give Candies 组合数学隔板法+欧拉降幂相关推荐
- ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L)
ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L) 发了博客一万年之后才发现H1写错了(tao A. Magic Mirror 题目链接 题面: Jessie has ...
- ACM-ICPC 2018 焦作赛区网络预赛 J(二分+JAVA高精)
传送门 题面: 65536K Jessie and Justin want to participate in e-sports. E-sports contain many games, but t ...
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
Now you have a string consists of uppercase letters, two integers AA and BB. We call a substring won ...
- L. Poor God Water(ACM-ICPC 2018 焦作赛区网络预赛,ac自动机+矩阵快速幂 或 BM线性递推)
描述 God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells hi ...
- ACM-ICPC 2018 焦作赛区网络预赛 A. Magic Mirror (水)| B . Mathematical Curse(dp)
A 题目: Jessie has a magic mirror. Every morning she will ask the mirror: 'Mirror mirror tell me, who ...
- ACM-ICPC 2018 徐州赛区网络预赛G (单调队列)
传送门 题面: There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( ...
- ACM-ICPC 2018 焦作赛区网络预赛
Give Candies 题意:有n颗糖,有n个人,按顺序出列,每次随机给那个人一些糖(至少一颗),分完为止,求有多少方案 思路:规律是2^(n−1) 根据费马小定理 a^(p−1)=1(mod p ...
- ACM-ICPC 2018 焦作赛区网络预赛 L Poor God Water(BM算法)
题目链接:https://nanti.jisuanke.com/t/31721 题目大意:三种食物,n小时,连续三小时不能吃一样的东西,中间吃巧克力时连续三个小时吃的东西不能完全不同,如果中间吃鱼或者 ...
- ACM-ICPC 2018 焦作赛区网络预赛 L. Poor God Water
#题解 大佬的递推式子..本弱鸡具体怎么得到的也不是很清楚 f(1)=3,f(2)=9,f(3)=20,f(4)=46,f(5)=106 f(n)=2f(n-1)-f(n-2)+3f(n-3)+2*f ...
最新文章
- 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。
- SSE eventSource简介
- Python工具包werkzeug
- 一个ApplicationContext.xml的配置
- 在 CentOS7 上安装 MySQL5.7
- 如何看待 70% 的程序员,缺乏数据结构和算法知识?
- linux查看主机脚本,简单的bash脚本查看任意网段的在线主机
- 读《探索需求-设计前的质量》有感三
- linux shell sort多字段排序
- 网上阅卷系统php源码,又开源了,网上阅卷系统自动识别功能代码 | 学步园
- 计算机工程与应用期刊模板,计算机工程与应用 论文模板
- Mac OS high Sierra 10.13.6 安装cuda
- 输出字符矩形--实心、空心
- 怎么选择.net培训机构
- Redis Stream的消费者组介绍
- 数据结构之折半查找法(Binary Search)
- 前端业界各类技术大会或论坛
- 【题解】少女觉 (2019.08.12纪中【NOIP提高组】模拟 B 组T1)贪心
- 兆骑科创创业赛事活动发布平台,创业赛事,项目路演
- 【智能车学习】电磁循迹中的基本控制算法
热门文章
- CSS 伪元素和伪类
- Linux虚拟机的启动及相关命令
- drupal Form
- Python推荐算法案例(2)——基于内容的电影推荐
- 计算机保研面试经验分享—西北工业大学
- 2021萧山三中高考成绩查询,萧山2018高考创新高!萧中735人,二中253人,三中696人......
- FFMPEG总结 -- 音视频编解码和转码(全)
- 长安“战役“网络安全卫士守护赛
- ArcGIS Engine10.0轻松入门级教程(5)——ArcEngine10.0三维开发
- 程序员腰椎和颈椎问题 健康最重要