博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu---(2604)Queuing(矩阵快速幂)
阅读量:4321 次
发布时间:2019-06-06

本文共 2665 字,大约阅读时间需要 8 分钟。

Queuing

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2796    Accepted Submission(s): 1282

Problem Description
Queues and Priority Queues are data structures which are known to most computer scientists. The Queue occurs often in our daily life. There are many people lined up at the lunch time.
  Now we define that ‘f’ is short for female and ‘m’ is short for male. If the queue’s length is L, then there are 2
L numbers of queues. For example, if L = 2, then they are ff, mm, fm, mf . If there exists a subqueue as fmf or fff, we call it O-queue else it is a E-queue.
Your task is to calculate the number of E-queues mod M with length L by writing a program.
 

 

Input
Input a length L (0 <= L <= 10
6) and M.
 

 

Output
Output K mod M(1 <= M <= 30) where K is the number of E-queues with length L.
 

 

Sample Input
3 8 4 7 4 8
 

 

Sample Output
6 2 1
 

 

Author
WhereIsHeroFrom
 
 
   首先我们不考虑去模的问题:
      l = 0                            0 种
      l = 1      e的数目有 f,m: 2 种
      l = 2        ...........ff,mm,fm,mf    4种
      l = 3                                         6
      l = 4                                        9
      l =  5                                       15
      l  =  6                                      25
      f5=f4+f3+f1;
      f6=f5+f4+f2;
  ------->  fn={   fn-1+fn-3+fn-4  n>4;
由齐次方程构造矩阵.....
|fn   |    |1,0,1,1|  |fn-1|
|fn-1|    |1,0,0,0|  |fn-2|
|fn-2| = |0,1,0,0|*|fn-3|
|fn-3|    |0,0,1,0|   |fn-4|
代码:
1 //#define LOCAL 2 #include
3 #include
4 using namespace std; 5 //matrix --> ¾ØÕó 6 int mat[4][4]; 7 int ans[4][4]; 8 int len,m; 9 10 void init()11 {12 int cc[4][4]={13 {
1,0,1,1},{
1,0,0,0},14 {
0,1,0,0},{
0,0,1,0}};15 16 for(int i=0;i<4;i++)17 {18 for(int j=0;j<4;j++)19 {20 mat[i][j]=cc[i][j];21 if(i==j) ans[i][j]=1;22 else ans[i][j]=0;23 }24 }25 }26 void Matrix(int a[][4],int b[][4]) //¾ØÕóÏà³Ë27 {28 int i,j,k;29 int c[4][4]={
0};30 for(j=0;j<4;j++){31 for(i=0;i<4;i++){32 for(k=0;k<4;k++){33 c[j][i]=(c[j][i]+a[j][k]*b[k][i])%m;34 }35 }36 }37 38 for(j=0;j<4;j++)39 for(i=0;i<4;i++)40 a[j][i]=c[j][i];41 42 }43 44 void pow(int n)45 {46 while(n>0)47 {48 if(n&1) Matrix(ans,mat);49 n>>=1;50 if(n==0) break;51 Matrix(mat,mat);52 }53 }54 int main()55 {56 #ifdef LOCAL57 freopen("test.in","r",stdin);58 #endif59 int f[4]={
2,4,6,9};60 while(scanf("%d%d",&len,&m)!=EOF)61 {62 if(len==0)printf("%d\n",0);63 else if(len<=4)printf("%d\n",f[len-1]%m);64 else{65 init();66 pow(len-4);67 printf("%d\n",(ans[0][0]*f[3]+ans[0][1]*f[2]+ans[0][2]*f[1]+ans[0][3]*f[0])%m);68 }69 }70 return 0;71 }
View Code

 

转载于:https://www.cnblogs.com/gongxijun/p/3985221.html

你可能感兴趣的文章
面试百题003——求子数组的最大和
查看>>
jq.validate 自定义验证两个日期
查看>>
公布一个以前写的随机数生成的方法
查看>>
AtCoder Regular Contest 077 被虐记&题解
查看>>
禁止ios10双指缩放
查看>>
LUOGU P1505 [国家集训队]旅游 (树链剖分+线段树)
查看>>
BZOJ 3509: [CodeChef] COUNTARI(fft+分块)
查看>>
flask源码解读05: Context(AppContext, RequestContext)
查看>>
css实现弹出层显示阻止滚动条滚动
查看>>
ping IP 带时间戳循环显示并写入日志(windos版+linux版)
查看>>
自学MVC看这里——全网最全ASP.NET MVC 教程汇总
查看>>
mediaxyz访谈录:ffmpeg的码率控制
查看>>
CenTOS7使用ACL控制目录权限,只给某个用户访问特定目录
查看>>
七天入门统计力学-第2天 系综与配分函数
查看>>
ubuntu server 10.04 apache2配置多个虚拟主机
查看>>
python标准库xml.etree.ElementTree的bug
查看>>
Tomcat服务器介绍和使用
查看>>
IOS网络方面(异步请求)
查看>>
day6 python学习
查看>>
事务分类
查看>>