昨晚苦恼了一晚,因为即将大三了,必须要准备实习什么的事了。一般都会去公司实习吧,但是看看自己的简历,实在拿不出手,因为大一大二都在搞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的更多相关文章

  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——Bell

    昨天比赛被虐的这个题目. 今天听斌牛讲过他的思路后就A掉了. 题目的意思是要你求出bell数的第n项对95041567取模. 首先,95041567=31*37*41*43*47: 然后取模就是先分别 ...

  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. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. 零基础学python-2.24 一些经常使用函数

    今天我举一些经常使用的函数,让大家了解一下: 函数 作用 dir([obj]) 浏览对象的属性 help([obj]) 显示对象的文档字符串 ini([obj]) 将对象转为整形 len([obj]) ...

  2. RDLC报表钻取空白页问题

    在改动报表查询条件时,钻取页突然空白了,百思不得其解,之前好好的,研究了一个下午和一个晚上.查资料等等,网上非常多资料都是设置报表的 ConsumeConteinerWhitespace = True ...

  3. Ubuntu Tomcat Service

    只需要将%TOMCAT_HOME%/bin/catalina.sh文件拷贝到/etc/init.d/文件夹下,稍作编辑,然后注册成系统服务,是否设置自启动均可. 1. 编辑catalina.sh文件c ...

  4. actionbarsherlock示例

    package com.example.viewpagerandtabdemo; import java.util.ArrayList; import java.util.List; import a ...

  5. Getting started with ASP.NET Core MVC and Visual Studio

    This tutorial will teach you the basics of building an ASP.NET Core MVC web app using Visual Studio ...

  6. c++对象关系映射(ORM)框架

    ORM(Object Relational Mapping, 对象关系映射),用来将基于对象的数据结构映射到SQL的数据结构中,即将基于对象的数据映射到关系表中的字段,然后我们可以通过对象提供的接口来 ...

  7. linux编译安装protobuf2.5.0

    1.下载安装包 https://github.com/google/protobuf/releases?after=v3.0.0-alpha-4.1 找到相应的版本下载 2.解压安装包 #.tar.g ...

  8. (转) 50个CSS技巧

    这里我工作中收集了10个很不错的CSS技巧,你可以用在你的项目上.它可以帮你很好地整理你的元素并让他们看起来蛮酷的.下面开始我们的内容,希望你会喜欢它.下面是我收集的CSS技巧,希望能帮助到你,感觉收 ...

  9. jQuery中样式和属性模块简单分析

    1.行内样式操作 目标:扩展框架实现行内样式的增删改查 1.1 创建 css 方法 目标:实现单个样式或者多个样式的操作 1.1.1 css方法 -获取样式 注意:使用 style 属性只能获取行内样 ...

  10. 用JS解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    当用ajax异步时,返回JsonResult格式的时候,发现当字段是dateTime类型时,返回的json格式既然是“/Date(1435542121135)/” 这样子的,当然这不是我们想要的格式. ...