Codevs No.1281 Xn数列
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数列的更多相关文章
- 【CODEVS】1281 Xn数列
[算法]矩阵快速幂 [题解]T*A(n-1)=A(n)矩阵如下: a 1 * x(n-1) 0 = xn 0 0 1 c 0 c 0 防止溢出可以用类似快速幂的快速乘. ...
- [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 输入描 ...
- 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 输入 ...
- codevs 1281 Xn数列 (矩阵乘法)
/* 再来个题练练手 scanf longlong 有bug....... */ #include<cstdio> #include<iostream> #include< ...
- 【wikioi】1281 Xn数列(矩阵乘法)
http://wikioi.com/problem/1281/ 矩阵真是个神奇的东西.. 只要搞出一个矩阵乘法,那么递推式可以完美的用上快速幂,然后使复杂度降到log 真是神奇. 在本题中,应该很快能 ...
- C++之路进阶——codevs1281(Xn数列)
1281 Xn数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你6个数,m, a, c, x0, n, ...
- 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 输入 ...
- 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 输入 ...
- Xn数列
题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输 ...
随机推荐
- java调用phantomjs采集ajax加载生成的网页
java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应 ...
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)
简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中.接着,在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)一文中举例子说明了如何在 ...
- 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 ...
- POJ 2455 - Secret Milking Machine
原题地址:http://poj.org/problem?id=2455 题目大意:给出一个N个点的无向图,中间有P条边,要求找出从1到n的T条通路,满足它们之间没有公共边,并使得这些通路中经过的最长的 ...
- JAVA将Excel中的报表导出为图片格式(三)换一种实现
上一篇介绍了使用Java的Robot机器人实现截图,然后将剪贴板上的数据流生成PNG图片 但是经过博主的不断测试,在完全依赖远程桌面的没有终端显示器的服务器上 使用截图方式是不可行的,因为一旦使用了远 ...
- C#计算程序执行速度
long t1 = DateTime.Now.Ticks; //执行程序,例如处理100个文件 long t2 = DateTime.Now.Ticks; Response.Write("执 ...
- asp.net正则表达式过滤标签和数据提取
无论什么语言,正则表达式的处理方法都是非常灵活.高效的,尤其是对某些字符串的抓取.过滤方面,更显其优势. 正则表达式的写法通常比较简单,几行短代码便能轻松完成看似很复杂的事情,更值得称赞的是,它的执行 ...
- VS2010安装中遇到的错误
背景 用win7 64位系统安装VS2010遇到一个错误,网上查了各种资料也没有找到这种解决办法,后来自己找到了解决办法,分享一下,让他人少走一些弯路. 错误信息 安装过程中遇到如下错误: [08/2 ...
- codeforces 333A - Secrets
题意:保证不能正好配齐n,要求输出可以用的最大硬币数. 注意如果用到某种硬币,那么这种硬币就有无穷多个.所以11=3+3+3+3,12=9+9,13=3+3+3+3+3 #include<cst ...
- linux kernel 模块多文件编译
/*************************************************************************** * linux kernel 模块多文件编译 ...