bzoj 4591 超能粒子炮·改 - Lucas
Description
Input
Output
Sample Input
5 5
Sample Output
HINT
Source
给定$n, k$,求$\sum_{i = 0} ^{k}C_{n}^{i}$模2333的余数。
显然Lucas。
$\sum_{i = 0} ^{k}C_{n}^{i}\\ =\sum_{i = 0} ^ {k}C_{n \% p}^{i\% p}C_{\left \lfloor \frac{n}{p} \right \rfloor}^{\left \lfloor \frac{i}{p} \right \rfloor}\\ =\left (\sum_{i = 0}^{p}C_{n \% p}^{i\% p} \right )\left ( \sum_{i = 0}^{\left \lfloor \frac{k}{p} \right \rfloor - 1} C_{\left \lfloor \frac{n}{p} \right \rfloor} ^ {\left \lfloor \frac{i}{p} \right \rfloor} \right ) + C_{\left \lfloor \frac{n}{p} \right \rfloor}^{\left \lfloor \frac{k}{p} \right \rfloor}\left ( \sum_{i = 0}^{k \% p}C_{n \% p}^{i} \right )$
考虑中间的一步可以进行递归计算。又因为$p = 2333$,所以最后一个前缀和可以预处理。
会出现一个较大的组合数,可以直接用Lucas算。
其实它可先用Lucas预处理,这样可以少个log。
Code
/**
* bzoj
* Problem#4591
* Accepted
* Time: 4140ms
* Memory: 44008k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define ll long long const int p = ; ll n, k; int pow2[p + ];
int C[p + ][p + ];
int sc[p + ][p + ]; inline void prepare() {
pow2[] = ;
for (int i = ; i < p; i++)
pow2[i] = (pow2[i - ] << ) % p; C[][] = ;
for (int i = ; i < p; i++) {
C[i][] = C[i][i] = ;
for (int j = ; j < i; j++)
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % p;
} for (int i = ; i < p; i++) {
sc[i][] = ;
for (int j = ; j < p; j++)
sc[i][j] = (sc[i][j - ] + C[i][j]) % p;
}
} inline void init() {
scanf(Auto""Auto, &n, &k);
} int Lucas(ll n, ll k) {
if (!n && !k) return ;
return Lucas(n / p, k / p) * C[n % p][k % p] % p;
} int S(ll n, ll k) {
if (k < ) return ;
return (pow2[n % p] * S(n / p, k / p - ) + Lucas(n / p, k / p) * sc[n % p][k % p]) % p;
} inline void solve() {
printf("%d\n", S(n, k));
} int T;
int main() {
prepare();
scanf("%d", &T);
while (T--) {
init();
solve();
}
return ;
}
bzoj 4591 超能粒子炮·改 - Lucas的更多相关文章
- [BZOJ 4591] 超能粒子炮-改
Link: 传送门 Solution: 记录一下推$\sum_{i=0}^k C_n^i$的过程: 其实就是将相同的$i/p$合起来算,这样每个里面都是一个可以预处理的子问题 接下来递归下去算即可 T ...
- bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]
4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...
- 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理
题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...
- P4345 [SHOI2015]超能粒子炮·改 Lucas
\(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...
- [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)
Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...
- Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...
- [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...
- Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 178 Solved: 70[Submit][Stat ...
- BZOJ 4591 【SHOI2015】 超能粒子炮·改
题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...
随机推荐
- T Y P E L I B R A R I E S库加载
#---------------------------------------------------------------------------- # T Y P E L I B R A R ...
- cocos2dx 3.x(打开网页webView)
#include "ui/CocosGUI.h" using namespace cocos2d::experimental::ui; WebView *webView = Web ...
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏。
问题描述:VS2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏. 解决办法: 修改嵌入清单选项为否,然后重新便于创建. 参考自:htt ...
- webpack打包报错
Invalid configuration object. Webpack has been initialised using a configuration object that does no ...
- Hbase java api
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144export HADOOP_HOME=/home/hadoop/app/hadoop-2.4.1export ...
- html5-css选择器
/*/**{color: red}p{color: green}#div1{background: blue;padding-top: 15px;}.kk{background: blue;borde ...
- GBDT:梯度提升决策树
http://www.jianshu.com/p/005a4e6ac775 综述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Ad ...
- Running tests on PyCharm using Robot Framework
问题: I started using PyCharm with the robot framework, but i'm facing an issue. how can i run my test ...
- Applegate 方法使用
1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotif ...
- [openjudge-搜索]哆啦A梦的时光机
题目描述 描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿 ...