嘟嘟嘟




先看了一遍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. Async/Await是这样简化JavaScript代码的

    译者按: 在Async/Await替代Promise的6个理由中,我们比较了两种不同的异步编程方法:Async/Await和Promise,这篇博客将通过示例代码介绍Async/Await是如何简化J ...

  2. ChartControl ViewType.Pie3D 用法测试

    效果图一. public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void For ...

  3. js 处理金额各个位数上的值

    //金额处理 var number = 1234567.35; if (parseInt(number) == number) { var money = number.toString().spli ...

  4. jQuery效果之雪花飘落

    实现思路 1.在一定的频率下在页面中生成一定数目的雪花从上往下飘落: 2.在指定的时间内飘落后移除页面: 3.可设置雪花的大小,在一定范围内随机雪花大小: 4.什么时间后清除生成雪花,停止函数. js ...

  5. iPhone手机怎么投屏到电脑上

    如今生活水平不断上升,人们更加追求高质量.高享受的生活,所以可以利用一切资源提高生活质量,享受更好的生活体验,比如说手机投屏电脑就可以提高我们的视觉体验,所以更多的人去尝试,那么iPhone手机怎么投 ...

  6. mybatis的三种批量插入以及次效率比较

    1.表结构 CREATE TABLE `t_user` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主键', `name` varc ...

  7. Android为TV端助力 转载:android自定义view实战(温度控制表)!

    效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ...

  8. 从头开始:详解MVVM、MVVMLight

    究竟为什么要学习MVVM? 相信大部分同学在刚开始接触MVVM的时候(包括我自己),心里默默在想这究竟是什么玩意?一个简单的功能要写一大段代码才能完成,在看到MVVM的核心目标: 1.让UI界面与逻辑 ...

  9. 《React与Redux开发实例精解》读书笔记

    第五章 JSX语法 class属性改为className for属性改为htmlFor jsx中javascript表达式必须要有返回值,使用三元操作符 所有的标签必须闭合 input img等 re ...

  10. pycharm 中按照文档引包方式,引包错误

    * python使用pycharm ide,如果电脑上有多个解释器的,在项目解释器配置的应该是当前使用的解释器: * 可以把当前使用的解释器目录添加到系统环境变量中,这样就不会报错了 另外,如果目录中 ...