tjut 3509

原创 2016年08月30日 10:32:51
#include <cstdio>  
#include <iostream>  
#include <cstring>  
  
using namespace std;  
typedef long long LL;  
  
const int N=55;  
LL x[N][N],y[N][N],s[N][N];  
LL A[N],B[N],F1[N],F2[N],tmp;  
int f1,f2,a,b,K,n,m;  
int i,j,k,t;  
  
void mul(LL x[N][N],LL y[N][N])  
{  
    int i,j,k;  
    for(i=0; i<K+2; ++i)  
    {  
        for(j=0; j<K+2; ++j)  
        {  
            for(s[i][j]=k=0; k<K+2; ++k)  
                s[i][j]+=x[i][k]*y[k][j]%m;  
            s[i][j]%=m;  
        }  
    }  
    for(i=0; i<K+2; ++i)  
        for(j=0; j<K+2; ++j)  
            x[i][j]=s[i][j];  
}  
  
int main()  
{  
    cin>>t;  
    while(t--)  
    {  
        cin>>f1>>f2>>a>>b>>K>>n>>m;  
        A[0]=B[0]=F1[0]=F2[0]=1;  
        for(i=1; i<K+2; ++i)  
        {  
            A[i]=A[i-1]*a%m;  
            B[i]=B[i-1]*b%m;  
            F1[i]=F1[i-1]*f1%m;  
            F2[i]=F2[i-1]*f2%m;  
        }  
        memset(x,0,sizeof(x));  
        memset(y,0,sizeof(y));  
        for(i=0; i<K+2; ++i)x[i][i]=1;  
        y[0][0]=y[0][1]=1;  
        for(i=1; i<K+2; ++i)  
        {  
            for(j=1,tmp=1,k=K-i+2; k--; ++j)  
            {  
                y[i][j]=(tmp%m)*A[k]%m;  
                y[i][j]=(y[i][j]*B[j-1])%m;  
                tmp*=k;  
                tmp/=j;  
            }  
        }  
        --n;  
        while(n)  
        {  
            if(n&1)mul(x,y);  
            mul(y,y);  
            n>>=1;  
        }  
        tmp=F1[K]*x[0][0]%m;  
        for(i=1; i<K+2; ++i)  
        {  
            tmp+=((F2[K-i+1]*F1[i-1])%m)*x[0][i];  
            tmp%=m;  
        }  
        cout<<tmp<<endl;  
    }  
    return 0;  
}  


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luozhong11/article/details/52367189

BZOJ3509: [CodeChef] COUNTARI

想不到怎么办,分块试一下 块内的可以直接DP出来,块与块之间的,化一下公式发现ai+ak=2aja_i+a_k=2a_j,所以处理第i块,维护1~i-1块每个数出现次数,i+1~n块每个数出现次数,...
  • L_0_Forever_LF
  • L_0_Forever_LF
  • 2016-10-26 22:17:10
  • 602

【 bzoj 3509 】[CodeChef] COUNTARI - 分块FFT

看起来很像数据结构乱搞?   然而仔细看看数据范围:Ai
  • GEOTCBRL
  • GEOTCBRL
  • 2016-02-04 21:05:23
  • 1398

Bzoj3509:[CodeChef] COUNTARI:分块+FFT

题目链接:3509:[CodeChef] COUNTARI 题目要求求出(i,j,k)的对数满足i 式子变形得到a[j]*2=a[i]+a[k]; 考虑对于每个a[j]求出左边的i和右边的k 发现这个...
  • qq_34025203
  • qq_34025203
  • 2016-07-13 09:34:22
  • 636

Zoj 3509

看着像图。
  • morgan_xww
  • morgan_xww
  • 2011-05-05 17:11:00
  • 1127

zoj 3509

题目大意: N个点,M次加边/删边/询问两点连通性操作,初始图为空。N 题解: 想什么呢,大力bitset!N*N*M/32花式水过! 附代码: #include #define N 510...
  • qq_39387710
  • qq_39387710
  • 2017-07-08 09:53:29
  • 90

BZOJ3509 [CodeChef] COUNTARI

考虑分块FFT 对位置分块,那么对两边的权值生成函数可以做FFT,那么块里的权值*2的位置就可以加到答案上 这样算出来的是3个都不在一块内的 有在一块内的暴力即可 暴力的技巧要好,要不然就会被卡常数-...
  • neither_nor
  • neither_nor
  • 2017-03-22 10:21:48
  • 450

HDU 4283 You Are the One 区间DP

题目描述:Description   The TV shows such as You Are the One has been very popular. In order to meet the...
  • wuxuanyi27
  • wuxuanyi27
  • 2016-05-04 19:15:21
  • 145

HDU4283-You Are the One

You Are the One                                                                        Time Limit: 2...
  • a664607530
  • a664607530
  • 2016-09-18 21:20:55
  • 162

poj 3509

Rotating Rings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1707   ...
  • sdjzujxc
  • sdjzujxc
  • 2013-03-18 18:41:41
  • 427

hdu 3509

snowingsea is having Buge’s discrete mathematics lesson, Buge is now talking about the Fibonacci Num...
  • baidu_30309461
  • baidu_30309461
  • 2015-08-16 22:18:01
  • 175
收藏助手
不良信息举报
您举报文章:tjut 3509
举报原因:
原因补充:

(最多只允许输入30个字)