昨天比赛被虐的这个题目。

今天听斌牛讲过他的思路后就A掉了。

题目的意思是要你求出bell数的第n项对95041567取模。

首先,95041567=31*37*41*43*47;

然后取模就是先分别取模,然后就用中国剩余定理合并了。

现在的问题就是如何求出来B[n]对95041567分别取模的结果了哦。

不错,现在你缺少的就是一个公式——B[P^m+n]==(B[n]+B[n+1])%P——P为任一个质数(来自维基百科)。

这样的话我们就可以递推了哦。

从大的开始往小的递推,每次减去一个最大的P^m,知道推到一个n<=P,用记忆化<map>就A掉了。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#define N 95041567
#define maxn 2147483647
#define ll long long
using namespace std; llm[5]={31,37,41,43,47},a[5],n,t;
llf[5][50][50];
map<ll,ll>ss; void function()
{
for (lli=0; i<5; i++)
{
f[i][0][0]=1;
f[i][1][1]=1;
for (llj=2; j<=m[i]; j++)
{
f[i][j][1]=f[i][j-1][j-1];
for (llk=2; k<=j; k++)
f[i][j][k]=(f[i][j][k-1]+f[i][j-1][k-1])%m[i];
}
}
} llget(lltot,llx)
{
if (tot<=m[x]) return f[x][tot][tot];
if (ss[tot]!=0) return ss[tot];
llM=1,cur=m[x];
while (cur*m[x]<=tot) M++,cur*=m[x];
ss[tot]=(M*get(tot-cur,x)+get(tot-cur+1,x))%m[x];
return ss[tot];
} void exgcd(llA,llB,ll& x,ll& y)
{
if (!B) { x=1,y=0; }
else { exgcd(B,A%B,y,x); y-=A/B*x; }
} llchina()
{
lld,x=0,y;
for (lli=0; i<5; i++)
{
llw=N/m[i];
exgcd(m[i],w,d,y);
x=(x+y*w*a[i])%N;
}
return (x+N)%N;
} int main()
{
function();
cin>>t;
while (t--)
{
cin>>n;
for (lli=0; i<5; i++)
{
ss.clear();
a[i]=get(n,i);
}
cout<<china()<<"\n";
}
return 0;
}

HDU 4767——Bell的更多相关文章

  1. HDU 4767 Bell(矩阵+中国剩余定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:给出n.求n有多少种划分集合的方式,即bell(n) 思路: #include <i ...

  2. 2013长春网赛1009 hdu 4767 Bell(矩阵快速幂+中国剩余定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:求集合{1, 2, 3, ..., n}有多少种划分情况bell[n],最后结果bell[ ...

  3. hdu 4767 Bell

    思路:矩阵快速幂+中国剩余定理!! 查资料得到2个公式:             1) B[n+p] = B[n] + B[n+1] mod p ;             2) B[p^m+n] = ...

  4. HDU 4767

    昨晚苦恼了一晚,因为即将大三了,必须要准备实习什么的事了.一般都会去公司实习吧,但是看看自己的简历,实在拿不出手,因为大一大二都在搞ACM(虽然真正搞的只有大二一年),但却没有什么成绩,又不愿意做项目 ...

  5. Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)

    Bell Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  6. Bell(矩阵快速幂+中国剩余定理)

    Bell Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  7. hdu 5445 Food Problem 多重背包

    Food Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...

  8. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  9. HDU 2512 一卡通大冒险(第二类斯特林数+贝尔数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512 题目大意:因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部 ...

随机推荐

  1. 20155235 2016-2017-2《Java程序设计》课程总结

    每周作业链接汇总 预备作业一:学期前作业 预备作业二:技能获取与C语言学习情况 预备作业三:安装虚拟机与Linux的学习 第一周作业:20155235 2006-2007-2 <Java程序设计 ...

  2. 2016-2017-2 20155339 实验二《Java面向对象程序设计》实验报告

    2016-2017-2 20155339 实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟 ...

  3. 【BZOJ4803】逆欧拉函数

    [BZOJ4803]逆欧拉函数 题面 bzoj 题解 题目是给定你\(\varphi(n)\)要求前\(k\)小的\(n\). 设\(n=\prod_{i=1}^k{p_i}^{c_i}\) 则\(\ ...

  4. CF 1037 D. Valid BFS?

    D. Valid BFS? http://codeforces.com/contest/1037/problem/D 题意: 给一个序列,一棵树,判断能否bfs这棵树,得到这个序列. 分析: 将每个点 ...

  5. WPF DrawingContext Pen

    <Window x:Class="WPFDrawing.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...

  6. devpi 快速入门:上传,测试,推送发行版

    安装 devpi 客户端和服务器端 pip install -U devpi 这将安装devpi-client,devpi-server 和 devpi-web 三个Python PyPi包. 初始化 ...

  7. 车牌,车架号,VIN码毫秒识别技术,汽车后市场的春天到来了

    vin码(车架号)识别运用 不仅在制造.销售.保养.保险.车辆评估.交易环节会需要录入汽车的VIN码,在交通事故处理中,作为汽车身份唯一识别码,VIN码是处理事故的执法人员必须要记录的信息之一.随着汽 ...

  8. Ubuntu 16.04 主题美化及常用软件安装

    一.主题美化 系统清理 系统更新: 安装完系统之后,需要更新一些补丁.Ctrl+Alt+T调出终端,执行一下代码: sudo apt-get update sudo apt-get upgrade 卸 ...

  9. JavaScript学习笔记(五)——类型、转换、相等、字符串

    第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...

  10. 常用的os操作方法

    os.sep可以取代操作系统特定的路径分隔符.windows下为 “”os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' ...