2016-06-01 16:28:25

题目链接: Xn数列 (Codevs No.1281)

题目大意:

  给定一种递推式为 Xn=(A*Xn-1+C)%M 的数列,求特定的某一项%G

解法:

  矩阵乘法

  不会的去看看高中矩阵的那本选修,起码知道都是啥意思,好理解得多

  矩阵构造:           向量构造:

    A C                   X0

    0  1                    1

需要注意的地方:

  1.超大整数乘法,写个快速乘,防止爆longlong

  2.函数的代值类型千万别错了啊,一个longlong打成int爆了一个多小时

 //Xn数列 (Codevs No.1281)
//矩阵乘法
#include<stdio.h>
#include<algorithm>
using namespace std;
long long a[][];
long long b[][];
long long c[][];
long long M,A,C,X,N,G;
long long ans;
long long mX(long long x, long long y)
{
long long s=,k=;
while(y>)
{
if(y&)s=(s+x)%M;
x=(x<<)%M;
y=y>>;
}
return s;
}
void Multi1()
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
c[i][j]=;
for(int k=;k<=;k++)
{
c[i][j]=(c[i][j]%M+mX(a[i][k],b[k][j])%M)%M;
}
}
}
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
a[i][j]=c[i][j];
}
}
return ;
}
void Multi2()
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
c[i][j]=;
for(int k=;k<=;k++)
{
c[i][j]=(c[i][j]%M+mX(b[i][k],b[k][j])%M)%M;
}
}
}
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
b[i][j]=c[i][j];
}
}
return ;
}
void Bpow(long long x)
{
while(x)
{
if(x&)Multi1();
Multi2();
x>>=;
}
return ;
}
int main()
{
scanf("%lld %lld %lld %lld %lld %lld",&M,&A,&C,&X,&N,&G);
a[][]=b[][]=;
a[][]=b[][]=A%M;
a[][]=b[][]=C%M;
Bpow(N-);
ans=(mX(a[][],X)+a[][])%M;
printf("%lld",ans%G);
}

Codevs No.1281 Xn数列的更多相关文章

  1. 【CODEVS】1281 Xn数列

    [算法]矩阵快速幂 [题解]T*A(n-1)=A(n)矩阵如下: a 1 * x(n-1) 0 = xn 0 0 1    c        0    c   0 防止溢出可以用类似快速幂的快速乘. ...

  2. [WikiOI "天梯"1281] Xn数列

    题目描述Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描 ...

  3. codevs 1281 Xn数列

    题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...

  4. codevs 1281 Xn数列 (矩阵乘法)

    /* 再来个题练练手 scanf longlong 有bug....... */ #include<cstdio> #include<iostream> #include< ...

  5. 【wikioi】1281 Xn数列(矩阵乘法)

    http://wikioi.com/problem/1281/ 矩阵真是个神奇的东西.. 只要搞出一个矩阵乘法,那么递推式可以完美的用上快速幂,然后使复杂度降到log 真是神奇. 在本题中,应该很快能 ...

  6. C++之路进阶——codevs1281(Xn数列)

    1281 Xn数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description 给你6个数,m, a, c, x0, n, ...

  7. Xn数列(codevs 1281)

    题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...

  8. codevs1281 Xn数列

    题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...

  9. Xn数列

     题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输 ...

随机推荐

  1. java调用phantomjs采集ajax加载生成的网页

    java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应 ...

  2. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)

    简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中.接着,在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)一文中举例子说明了如何在 ...

  3. Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1

    Reference link: http://unix.stackexchange.com/questions/70963/difference-between-2-2-dev-null-dev-nu ...

  4. POJ 2455 - Secret Milking Machine

    原题地址:http://poj.org/problem?id=2455 题目大意:给出一个N个点的无向图,中间有P条边,要求找出从1到n的T条通路,满足它们之间没有公共边,并使得这些通路中经过的最长的 ...

  5. JAVA将Excel中的报表导出为图片格式(三)换一种实现

    上一篇介绍了使用Java的Robot机器人实现截图,然后将剪贴板上的数据流生成PNG图片 但是经过博主的不断测试,在完全依赖远程桌面的没有终端显示器的服务器上 使用截图方式是不可行的,因为一旦使用了远 ...

  6. C#计算程序执行速度

    long t1 = DateTime.Now.Ticks; //执行程序,例如处理100个文件 long t2 = DateTime.Now.Ticks; Response.Write("执 ...

  7. asp.net正则表达式过滤标签和数据提取

    无论什么语言,正则表达式的处理方法都是非常灵活.高效的,尤其是对某些字符串的抓取.过滤方面,更显其优势. 正则表达式的写法通常比较简单,几行短代码便能轻松完成看似很复杂的事情,更值得称赞的是,它的执行 ...

  8. VS2010安装中遇到的错误

    背景 用win7 64位系统安装VS2010遇到一个错误,网上查了各种资料也没有找到这种解决办法,后来自己找到了解决办法,分享一下,让他人少走一些弯路. 错误信息 安装过程中遇到如下错误: [08/2 ...

  9. codeforces 333A - Secrets

    题意:保证不能正好配齐n,要求输出可以用的最大硬币数. 注意如果用到某种硬币,那么这种硬币就有无穷多个.所以11=3+3+3+3,12=9+9,13=3+3+3+3+3 #include<cst ...

  10. linux kernel 模块多文件编译

    /*************************************************************************** * linux kernel 模块多文件编译 ...