嘟嘟嘟




先看了一遍lucas,还是只能拿50分(似乎已经满足了)。

正解当然还是看某个大佬的啦。




我们要求的就是

\[f(n, k) = \sum _ {i = 0} ^ {k} C _ {n} ^ {i} \% p
\]

然后根据lucas定理,就开始愉快的推式子了……

\[\begin{align*}
f(n, k)
&= \sum _ {i = 0} ^ {k} C _ {n} ^ {i} \% p \\
&= \sum _ {i = 0} ^ {k} C_ {n / p} ^ {i / p} * C _ {n \% p} ^ {i \% p} \\
&= C_{n / p} ^ {0} \sum _ {i = 0} ^ {p - 1} C _ {n \% p} ^ {i} + C _ {n / p} ^ {1} \sum _ {i = 0} ^ {p - 1} C _ {n \% p} ^ {i} + \ldots + C_{n / p} ^ {k / p - 1} \sum _ {i = 0} ^ {p - 1} C _ {n \% p} ^ {i} + C _ {n / p} ^ {k / p} \sum _ {i = 0} ^ {k \% p} C _ {n \% p} ^ {i}\\
&= \sum _ {i = 0} ^ {p - 1} C _ {n \% p} ^ {i} * (C _ {n / p} ^ {0} + C_{n / p} ^ {1} + \ldots + C_{n / p} ^ {k / p - 1}) + C _ {n / p} ^ {k / p} \sum _ {i = 0} ^ {k \% p} C _ {n \% p} ^ {i} \\
&= f(n \% p, p - 1) * f(n / p, k / p - 1) + C _ {n / p} ^ {k / p} * f(n \% p, k \% p) \\
\end{align*}
\]

然后把\(f(n \% p, k \% p)\)预处理一下,就完事了。(说的真轻松……)

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define In inline
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 2505;
const int p = 2333;
inline ll read()
{
ll ans = 0;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) last = ch, ch = getchar();
while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < 0) x = -x, putchar('-');
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
} ll n, K;
ll C[maxn][maxn], f[maxn][maxn]; In ll inc(ll a, ll b) {return a + b >= p ? a + b - p : a + b;} In ll lucas(ll n, ll m)
{
if(!m || n == m) return 1;
if(n < m) return 0;
return C[n % p][m % p] * lucas(n / p, m / p) % p;
}
In ll F(ll n, ll K)
{
if(K < 0) return 0;
if(!n || !K) return 1;
if(n < p && K < p) return f[n][K];
return inc(f[n % p][p - 1] * F(n / p, K / p - 1) % p, lucas(n / p, K / p) * f[n % p][K % p] % p);
} In void init()
{
for(int i = 0; i < maxn; ++i) C[i][0] = 1;
for(int i = 1; i < maxn; ++i)
for(int j = 1; j <= i; ++j)
C[i][j] = inc(C[i - 1][j - 1], C[i - 1][j]);
for(int i = 0; i < maxn; ++i) f[i][0] = 1;
for(int i = 0; i < maxn; ++i)
for(int j = 1; j < maxn; ++j)
f[i][j] = inc(C[i][j], f[i][j - 1]);
} int main()
{
init();
int T = read();
while(T--)
{
n = read(), K = read();
write(F(n, K)), enter;
}
return 0;
}

[SHOI2015]超能粒子炮·改的更多相关文章

  1. Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 178  Solved: 70[Submit][Stat ...

  2. bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]

    4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...

  3. 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)

    [BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...

  4. 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告

    P4345 [SHOI2015]超能粒子炮·改 题意 求\(\sum_{i=0}^k\binom{n}{i}\),\(T\)组数据 范围 \(T\le 10^5,n,j\le 10^{18}\) 设\ ...

  5. bzoj4591 / P4345 [SHOI2015]超能粒子炮·改

    P4345 [SHOI2015]超能粒子炮·改 题意:求$\sum_{i=1}^{k}C(n,i)\%(P=2333)$ 肯定要先拆开,不然怎么做呢(大雾) 把$C(n,i)$用$lucas$分解一下 ...

  6. BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理

    BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理 Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以 ...

  7. Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)

    Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...

  8. 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理

    题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...

  9. bzoj4591 [Shoi2015]超能粒子炮·改

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  10. loj 2038 / 洛谷 P4345 [SHOI2015] 超能粒子炮・改 题解

    好玩的推式子 题目描述 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒子炮・改相比超能粒子炮,在威力上 ...

随机推荐

  1. Codeforces617E(莫队)

    E. XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input ...

  2. mapper加载的3种方法

    <!-- mapper加载有3种方法: 1:通过resource或url加载单个mapper 2:通过mapper接口类名加载单个mapper 3:通过package批量加载多个mapper(推 ...

  3. laravel compact的用法

    向视图中传递变量 我们在开发web应用当中,通常都不是为了写静态页面而生的,我们需要跟数据打交道,那么这个时候,问题就来了,在一个MVC的框架中,怎么将数据传给视图呢?比如我们要在 ArticleCo ...

  4. 将Y-m-d转换为Y年m月d日

    自己编写的,不能直接套用,理解后可自行变化: $var=explode(' ',$res['act_starting']); $var1=$var[0];          $time=explode ...

  5. angular url 传参

    1.路由里配置参数operation 2.页面A跳转时带上参数 $scope.goPage = function (op) { $state.go("app.productConfigadd ...

  6. 常用的JVM调优参数总结汇总【随时查阅学习】

    本文章参数根据后期用的参数会持续更新  --- (1)-Xms20M 表示设置JVM启动内存的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置JVM启动内存的最大值为20M,必须以M为单 ...

  7. Java用户自定义函数

    用户除了可以使用JavaScript的内置函数之外,还可以自己定义函数.自定义函数有3种方法. 使用关键字 function 构造 语法: function funcName([param1][,pa ...

  8. apache php mysql 安装

    推荐参考这里:http://www.myhack58.com/Article/sort099/sort0100/2012/35578_3.htm

  9. 虚拟机中安装Virtualbox,嵌套的虚拟机不能运行64位系统

    https://www.quora.com/Can-I-install-Virtualbox-in-a-virtual-machine Here is a previous question on Q ...

  10. 【软件需求工程与建模 - 小组项目】第6周 - 成果展示3 - 软件设计规格说明书V4.1

    成果展示3 - 软件设计规格说明书V4.1