HDU 4767
昨晚苦恼了一晚,因为即将大三了,必须要准备实习什么的事了。一般都会去公司实习吧,但是看看自己的简历,实在拿不出手,因为大一大二都在搞ACM(虽然真正搞的只有大二一年),但却没有什么成绩,又不愿意做项目,因为只想一心搞ACM。可到了现在,如果真的没点什么的话,可能就去不了做实习生了。
但是,想想自己,这个暑假几乎没回家,因为要多练习,多做题,终于是把计算几何和数论的题算是完整的做了吧,过程很痛苦,但因为心里面有一个理想,那就是在省赛摘金,改写学校的历史,也并不觉累。假若现在放弃,我实在会后悔死,即便以后,也会痛恨自己的。思索过一晚上,还是下定决心,要把ACM进行到底,无论是出于兴趣或是功利的目的,我实在不愿放弃。至于项目,却也是必须要搞的,因为学校规定,每人至少参与一个项目开发。我知道自己在学校的时间不会多了,所以,必须更加的努力,更加的更加的努力,既要做项目,更要把ACM搞好,多做题,多做题,因为这是我好不容易才得到的机会,我不想就此放弃。我相信,勤奋是会有回报的。
-----------------------------------------------------------------
这道题,假如不知道公式什么的,实在是做不出来。
百度一下,有了两条公式
对于第二条公式,查一下stirling数是怎么计算的,对于第二条,就把那个大的模数分解成小的素数相乘,求出对于每个素数的余,然后运用中国剩余定理写就可以了。
由递推式,可以构造一个b(n),b(n+1),b(n+2)....b(n+p-1)的1*p的矩阵,至于p*p的,你就会构造了。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; int Mod=95041567;
int m[5]={ 31 , 37 , 41 , 43 , 47};
int at[5]; int data[62][62]; void stirling()
{
int min, i, j,s=60,n=60;
memset(data,0,sizeof(data));
data[0][0] = 1;
for( i = 1; i <= s; ++i ){
if( i < n ) min = i;
else min = n;
for( j = 1; j <= min; ++j ){
data[i][j] = ((int)(((__int64)j*(__int64)data[i-1][j])%(__int64)Mod)+ data[i-1][j-1])% Mod;
}
}
}
int bell[62];
int ans[62];
struct Matrax {
int m[62][62];
};
Matrax per,a; Matrax multi(Matrax a,Matrax b,int M){
Matrax c;
for(int i=0;i<M;i++){
for(int j=0;j<M;j++){
c.m[i][j]=0;
for(int k=0;k<M;k++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%M;
}
}
return c;
} Matrax Power(int k,int M){
Matrax ans=per,p=a;
while(k){
if(k&1){
ans=multi(ans,p,M);
}
k>>=1;
p=multi(p,p,M);
}
return ans;
} void initial(int l){
memset(a.m,0,sizeof(a.m));
memset(per.m,0,sizeof(per.m));
a.m[l][0]=1;
for(int i=1;i<=l;i++)
a.m[i][i]=a.m[i-1][i]=1;
for(int i=0;i<62;i++)
per.m[i][i]=1;
} int work(int n,int M){
initial(M-1);
Matrax ps=Power(n/(M-1),M);
/* for(int i=0;i<M;i++){
for(int j=0;j<M;j++)
cout<<ps.m[i][j]<<' ';
cout<<endl;
}*/
for(int i=0;i<M;i++){
ans[i]=0;
for(int k=0;k<M;k++){
ans[i]=(ans[i]+bell[k]*ps.m[k][i])%M;
}
}
return ans[n%(M-1)];
} void exgcd(int a,int b,int &d,int &x,int &y){
if(b==0){
x=1; y=0;
d=a;
return ;
}
else{
exgcd(b,a%b,d,x,y);
int tmp=x;
x=y;
y=tmp-(a/b)*y;
}
} int China(int r){
int Mc=1;
int i,Mi,x,y,d,as=0;
for(i=0;i<r;i++)
Mc*=m[i];
for(i=0;i<r;i++){
Mi=Mc/m[i];
exgcd(Mi,m[i],d,x,y);
as=(as+Mi*x*at[i])%Mc;
}
if(as<0)
as+=Mc;
return as;
} int main(){
int T,n,M;
stirling();
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<5;i++){
M=m[i];
for(int k=0;k<M;k++){
if(k==0){
bell[k]=1;
}
else{
bell[k]=0;
for(int p=1;p<=k;p++){
bell[k]=(bell[k]+data[k][p])%M;
}
}
// cout<<bell[k]<<' '<<k<<endl;
}
at[i]=work(n,M);
// cout<<at[i]<<endl;
// system("pause");
}
int ats=China(5);
printf("%d\n",ats);
}
return 0;
}
HDU 4767的更多相关文章
- HDU 4767 Bell(矩阵+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:给出n.求n有多少种划分集合的方式,即bell(n) 思路: #include <i ...
- 2013长春网赛1009 hdu 4767 Bell(矩阵快速幂+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:求集合{1, 2, 3, ..., n}有多少种划分情况bell[n],最后结果bell[ ...
- hdu 4767 Bell
思路:矩阵快速幂+中国剩余定理!! 查资料得到2个公式: 1) B[n+p] = B[n] + B[n+1] mod p ; 2) B[p^m+n] = ...
- HDU 4767——Bell
昨天比赛被虐的这个题目. 今天听斌牛讲过他的思路后就A掉了. 题目的意思是要你求出bell数的第n项对95041567取模. 首先,95041567=31*37*41*43*47: 然后取模就是先分别 ...
- Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- Bell(矩阵快速幂+中国剩余定理)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
随机推荐
- 谋哥:App开发人员的苦逼不值得怜悯!!
[谋哥每天一干货,第四十篇] 为什么取这个标题呢?由于昨天一些本来"支持"谋哥的人看到谋哥搞收费VIP群,认为谋哥赚苦逼开发人员的钱非常不道德,且说谋哥我写的东西都 ...
- <LeetCode OJ> 326. Power of Three
326. Power of Three Question Total Accepted: 1159 Total Submissions: 3275 Difficulty: Easy 推断给定整数是否是 ...
- The Triangle--nyoj 18
The Triangle 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure ...
- 动画和图形:OpenGL ES
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...
- Fail2ban + firewalld 防护doss攻击
系统环境:centos7.3 用途:利用fail2ban+Firewalld来防CC攻击和SSH爆破 准备工作: 1.检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 ser ...
- 基于HTML5陀螺仪实现ofo首页眼睛移动效果
最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个眼睛动的小黄人,觉得蛮有意思的,这里用HTML5仿一下效果. ofo眼睛效果 效果分析 从效果中不难看出,是使用陀螺仪事件实现的. 这里先来 ...
- (转)50 个 jQuery 小技巧
1. 如何修改jQuery默认编码(例如默认UTF-8改成改GB2312): $.ajaxSetup({ajaxSettings:{ contentType:"application/x-w ...
- jQuery动画知识总结
jQuery动画概述 我们之前实现的下拉菜单的案例,是没有动画效果的,但是在日常开发中,动画效果是经常会用到的,所以我们可以尝试使用jQuery动画,将下拉菜单案例实现的更动感一些. jQuery提供 ...
- go开发和运行环境的配置
1.运行环境的下载.安装.配置: 下载:http://www.golangtc.com/download 官网下载经常被墙屏蔽,所以就从golang中国下载; 安装及其配置:http://jingy ...
- Nagios Windows客户端NSClient++ 0.4.x安装配置
NSClient++ 0.3.x和NSClient++ 0.4.x的配置完全不一样,官方的文档也没有全部更新.我记录下自己的一些操作. 一.下载安装NSClient++ 1.到http://nsc ...