uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
来源:互联网 发布:java md5加密32位小写 编辑:程序博客网 时间:2024/05/17 07:37
题意:令a*b = q, a+b = p,现在给你q、 p、 n,问你a^n + b^n的值。
构造矩阵吧,比较简单。
但输入太坑爹了,上面说的是——Input is terminatedby a line containing only two zeroes.当输入一行只有两个0时结束,用while(scanf("%d%d", &p, &q), p || q)就悲剧了。
思路:((a-1)^n + (b-1)^n) * (a + b) = a^n + b^n + ((a-2)^n+(b-2)^n) * a*b。
令f(n) = a^n + b^n,则有公式f(n) + f(n-2)*q = f(n-1)*p。
构造矩阵就可以KO了。
AC代码:
#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <vector>#define INF 0x3f3f3f#define eps 1e-8#define MAXN (2000+1)#define MAXM (100000)#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%.2lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 1000000007#define LL long long#define lson o<<1, l, mid#define rson o<<1|1, mid+1, r#define ll o<<1#define rr o<<1|1using namespace std;struct Matrix{ LL a[3][3]; int r, c;};Matrix ori, res;Matrix multi(Matrix x, Matrix y){ Matrix z; z.r = x.r; z.c = y.c; CLR(z.a, 0); for(int i = 0; i < x.r; i++) { for(int k = 0; k < x.c; k++) { if(x.a[i][k] == 0) continue; for(int j = 0; j < y.c; j++) z.a[i][j] += x.a[i][k] * y.a[k][j]; } } return z;}void init_M(LL p, LL q){ ori.r = ori.c = res.r = res.c = 2; CLR(ori.a, 0); CLR(res.a, 0); res.a[0][0] = res.a[1][1] = 1; ori.a[0][0] = p; ori.a[0][1] = 1; ori.a[1][0] = -q;}LL F[3];void solve(LL n){ while(n > 0) { if(n & 1) res = multi(ori, res); ori = multi(ori, ori); n >>= 1; } LL ans = F[0] * res.a[0][0] + F[1] * res.a[1][0]; Pl(ans);}int main(){ LL p, q, n; while(scanf("%lld%lld%lld", &p, &q, &n) == 3) { F[0] = p; F[1] = 2; if(n <= 1) { Pl(F[1-n]); continue; } init_M(p, q); solve(n-1); } return 0;}
0 0
- uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
- uva 10655 Contemplation! Algebra 矩阵快速幂
- UVA 10655 - Contemplation! Algebra(矩阵快速幂)
- uva 10655 - Contemplation! Algebra(矩阵快速幂)
- UVA-10655 Contemplation! Algebra (矩阵快速幂)
- 【矩阵快速幂+输入终止条件判断】Contemplation! Algebra UVA
- UVA 10655 Contemplation! Algebra(矩阵快速幂)
- UVA 10655 Contemplation! Algebra (矩阵快速幂)
- UVA 10655 Contemplation! Algebra(构造矩阵和快速幂)
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- UVA 10655 Contemplation! Algebra(矩阵乘法)
- UVA 10655 Contemplation! Algebra(构造矩阵)
- UVA 10655 Contemplation! Algebra(矩阵乘法)
- Contemplation! Algebra(矩阵快速幂,uva10655)
- Uva10655 Contemplation! Algebra矩阵快速幂
- UVA 10655 Contemplation! Algebra
- UVA 10655 Contemplation! Algebra
- Android蓝牙BLE之RSSI读写(2)
- 将创建线程的API-pthread_create封装成一个线程类
- 《精通使用AngularJS开发Web App》(三)--- 深入scope,继承结构,事件系统和生命周期
- 同一form表单中,提交两个不同的action
- HBase配置
- uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
- 2015 ACM/ICPC Asia Regional Shanghai Online --HDU 5478
- 精选强大的常用linux命令
- 深入分析JavaWeb Item18 -- JavaWeb的两种常用开发模式
- elasticsearch mapping 学习
- Qt官方开发环境生成的exe发布方式--使用windeployqt
- Git 常用命令整理
- HTML5动画设计
- 排序算法 快速排序 归并排序 堆排序