关闭

BZOJ2510: 弱题(循环矩阵+矩阵快速幂)

219人阅读 评论(0) 收藏 举报
分类:

传送门

大神题解

循环矩阵相乘还是循环矩阵,所以每次乘法求第一行就行了,时间复杂度O(n2logK)

(代码XJB写的。)

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    char ch=getchar();int i=0,f=1;
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){i=(i<<1)+(i<<3)+ch-'0';ch=getchar();}
    return i*f;
} 
const int Maxn=1e3+50; 
int n,m,t;
double e[Maxn][Maxn],c[Maxn][Maxn],(*now)[Maxn]=e,(*now2)[Maxn]=c,rest[Maxn][Maxn],res2t[Maxn][Maxn],(*nowres)[Maxn]=rest,(*nowres2)[Maxn]=res2t;
double a[Maxn];
inline void mul(){
    for(int i=1;i<=n;i++){
        double res=0.0;
        for(int k=1;k<=n;k++)
        res+=now[1][k]*now[k][i];
        now2[1][i]=res;
    }
    for(int j=2;j<=n;j++)
        for(int k=1;k<=n;k++)
            now2[j][k]=now2[j-1][(k-1)?(k-1):n];
    swap(now,now2); 
}
inline void mul2(){
    for(int i=1;i<=n;i++){
        double res=0.0;
        for(int k=1;k<=n;k++)
        res+=nowres[1][k]*now[k][i];
        nowres2[1][i]=res;
    }
    for(int j=2;j<=n;j++)
        for(int k=1;k<=n;k++)
            nowres2[j][k]=nowres2[j-1][(k-1)?(k-1):n];
    swap(nowres,nowres2); 
}
int main(){
    n=read();m=read();t=read();
    for(int i=1;i<=n;i++)
        now[i][i]=-1.0/m+1.0,now[(i-1?i-1:n)][i]=1.0/m,nowres[i][i]=1.0;
    for(;t;t>>=1,mul()){
        if(t&1)mul2();
    }
    for(int i=1;i<=n;i++)a[i]=read();
    for(int i=1;i<=n;i++){
        double ans=0;
        for(int j=1;j<=n;j++){
            ans+=a[j]*nowres[j][i];
        }
        printf("%.3f\n",ans);
    }
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

矩阵快速幂 ——(递推表达式)

矩阵快速幂    首先知道矩阵       矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合;      矩阵乘法: 定义:设A为    的矩阵,B为   ...
  • WR_technology
  • WR_technology
  • 2016-05-06 19:44
  • 1351

hdu2157之矩阵快速幂

矩阵快速幂
  • xingyeyongheng
  • xingyeyongheng
  • 2013-08-03 13:22
  • 2122

java实现矩阵快速幂算法

java实现矩阵快速幂算法
  • y937498174
  • y937498174
  • 2015-04-24 09:53
  • 1101

循环矩阵的快速幂(bzoj 2510: 弱题)

题名可以。。 先考虑概率dp:dp[x][y]表示第x个回合后,标号为y的小球的期望个个数,那么有 直接转移的话,复杂度是O(nk)的,肯定会超时,不过还好这个递推式显然能转化成矩阵 假设n只有4...
  • Jaihk662
  • Jaihk662
  • 2017-08-02 12:23
  • 169

【BZOJ 2510】弱题 循环矩阵

#include #include #include #define maxn 1021 using namespace std; int nu[maxn][maxn],n,m,k; double m...
  • pbihao
  • pbihao
  • 2017-02-05 22:06
  • 84

BZOJ 2510 弱题 概率 矩阵乘法 循环矩阵

%%% http://hzwer.com/3392.html %%% http://blog.csdn.net/u012288458/article/details/46779357#include...
  • huanghongxun
  • huanghongxun
  • 2016-02-14 23:16
  • 524

【bzoj2510】弱题 概率dp+循环矩阵矩阵乘法

真心觉得是道不错的题,非常简单的dp方程,然后O(n^3)的矩阵乘法都是非常裸的,结果发现最后n   本题的矩阵是一个循环矩阵,每一行都是由前一行右移一位得到的,于是就有一个非常好的性质,我们只需要保...
  • u012288458
  • u012288458
  • 2015-07-06 21:36
  • 795

BZOJ 2553 AC自动机+矩阵快速幂 (神题)

思路: 我们先对所有读进来的T建一个AC自动机 因为走到一个禁忌串就需要回到根 所以呢 搞出来所有的结束点 或一下 fail指针指向的那个点然后我们就想转移 a[i][j]表示从i节点转...
  • qq_31785871
  • qq_31785871
  • 2016-12-09 16:14
  • 480

17.7.3小结、【矩阵快速幂】2017武大校赛I题:A simple math problem即nyoj2333、 bzoj2326

17.7.3暑假集训小结: 今天早上踩着8点进来了,昨天刚从家里到学校,先收拾了一下电脑到九点半; 从今天开始的计划是上学期考试的时候没刷的题目刷一下,到7.5; 一上午也没有做出这道题目,一直在...
  • baidu_35643793
  • baidu_35643793
  • 2017-07-03 21:28
  • 163

解题报告:FZU1692 Key problem 循环矩阵快速幂

Problem 1692 Key problem Accept: 196    Submit: 862 Time Limit: 1000 mSec    Memory Limit : 327...
  • qq_32570675
  • qq_32570675
  • 2016-08-21 21:14
  • 110
    个人资料
    • 访问:38841次
    • 积分:2940
    • 等级:
    • 排名:第13198名
    • 原创:255篇
    • 转载:5篇
    • 译文:1篇
    • 评论:21条
    文章分类