[XJB出题] [组合数学] 雪花项链(snowflakes)

来源:互联网 发布:java位运算实现加法 编辑:程序博客网 时间:2024/05/30 23:02

//HeRaNO又开新坑了……
Description 题目描述

HSD桑一直想送给FZ酱一个挂饰,可是总也找不到合适的。这一天,久违的雪降落在校园里,HSD桑灵光乍现,不如收集起这些雪花做一个。
于是,HSD桑在校园收集了n片雪花,准备制作雪花挂饰。可是有一个问题,因为HSD桑的思路是流动的,他没想好这个挂饰有多少片雪花。
可是他因为着急制作,所以不管那么多了,直接开始。准备好雪花们,却发现没有合适的绳子把它们穿起来……
好(shi)心(duo)的HeRaNO发现了闹心ing的HSD桑,于是帮他找到了一些绳子,可是因为他好(shi)心(duo),他向HSD桑提了T个问题,询问HSD桑利用这些雪花可以做成多少种不同的雪花挂饰。
HSD桑快烦死HeRaNO了,于是决定不回答。可是HeRaNO是绳子的提供者,如果不回答HeRaNO的问题,HeRaNO就会收走绳子……
因为HSD桑的思路是流动的,他每一次制作时都会在一个区间里选择雪花挂饰用的雪花数,我们把区间记为[l,r],为闭区间。所以HSD桑可以做成的挂饰数为用[l,r]内所有雪花数情况的和。因为HSD桑获得的绳子不是特别多,绳子用多了也麻烦,于是他想用最少的绳子将他想选择的雪花连接上。
因此,HSD桑向你发出了求助,请帮助HSD桑解决他的问题。

Input 输入

1行为三个正整数nTRnT意义如题。请在R的剩余系下完成计算;
2~T+1行,每行两个整数lr,意义如题。

Output 输出

输出T行,对于第i行表示对于第i个问题的答案。

Sample Input 样例输入

4 1 1000000007
3 4

Sample Output 样例输出

28

Explanation 样例解释

HSD桑可以用4片雪花中的3片做成12种不同的雪花挂饰,可以用4片雪花中的4片做成16种不同的雪花挂饰;
因此用[3,4]片雪花可做成12+16=28种不同的雪花挂饰。

Limits 限制

20组测试数据
其中:
50%的数据:R=109+7
其余50%的数据:R=998244353
10%的数据:n10
50%的数据:n106T=1
对于这50%的数据,有50%的数据l=r
100%的数据:n106T106,0lrn
Time Limit : 2s & Memory Limit : 512MB

Hints 提示

我们都知道,世界上几乎没有完全相同的两片雪花,所以本题中每片雪花可看做两两不同。
两种方案相同,当且仅当所选雪花完全相同且每一片雪花连接的雪花也完全相同。

请原谅我语言表达能力不足……
本人第二次出这样的组合数学题…….希望大家轻喷……
Solution 题解
首先,R是假的,那两个数都是质数……
如何用最少的绳子将n片雪花连起来,当然是用n1条绳子连成树了……
首先,我们从n片雪花中选出i片,方案有Cin种。
然后,我们把这i片雪花连起来,根据Cayley定理,共ii2种方案。
因此,对于选择i片雪花,就有Cinii2种方案。
因为i不是固定的,所以答案为ri=lCinii2
所以对于T=1的数据,每次暴力加起来……,对于T=106的数据,使用前缀和优化。
(ab)%p=(a%pb%p+p)%p……
对于求C的过程,O(n)处理逆元,O(1)计算。
对于求ii2的过程,上快速幂……
因此,整个算法时间复杂度为O(n+log2n!+T)
log2n!=ni=1log2i
n=106时,一定有
ni=1log2i<nlog2106<2107
得出log2n!<2107,所以时间复杂度可以保证。

Source 来源

五三数学选修2-3 P17第15题……
(数学课上闲的没事瞎想……)

Code

0 0
原创粉丝点击