fzu 1911 Construct a Matrix(矩阵快速幂+规律)

时间:2022-11-04 13:41:55

题目链接:fzu 1911 Construct a Matrix

题目大意:给出n和m,f[i]为斐波那契数列,s[i]为斐波那契数列前i项的和。r = s[n] % m。构造一个r * r的矩阵,只能使用-1、0、1。使得矩阵的每行每列的和都不相同,输出方案,不行的话输出No。

解题思路:求r的话用矩阵快速幂求,每次模掉m,

{ {1, 1, 0}, {1, 0, 0}, {1, 1, 1} } * { f[i], f[i -1], s[i] } = { f[i + 1], f[i], s[i + 1] }.

然后求出r后,若r是奇数或0,则矩阵不存在;r为偶数时,只要按照规律建立矩阵就可以了。

#include <stdio.h>
#include <string.h> const int M = 10;
const int N = 205; int n, m, r; struct Mul {
int s[M][M];
Mul() { memset(s, 0, sizeof(s)); }
Mul operator * (const Mul& c) {
Mul ans; for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
ans.s[i][j] = 0;
for (int k = 0; k < 3; k++)
ans.s[i][j] = (ans.s[i][j] + s[i][k] * c.s[k][j] ) % m;
}
}
return ans;
} void put() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
printf("%d ", s[i][j]);
printf("\n");
}
}
}; Mul MulPow(Mul a, int t) {
if (t == 1) return a; Mul x = MulPow(a, t / 2); x = x * x; if (t % 2) x = x * a; return x;
} void init() {
if (n > 2) {
Mul a;
a.s[0][0] = a.s[0][1] = a.s[1][0] = a.s[2][0] = a.s[2][1] = a.s[2][2] = 1; Mul ans = MulPow(a, n - 2); r = (ans.s[2][0] + ans.s[2][1] + ans.s[2][2] * 2) % m;
} else if (n == 2) {
r = 2 % m;
} else if (n == 1) {
r = 1;
}
} void solve() {
if (r == 0 || r % 2)
printf("No\n");
else {
int v[N][N];
memset(v, -1, sizeof(v));
printf("Yes\n"); for (int i = 1; i <= r; i++) {
int tmp;
if (i % 2) {
tmp = (r + i + 1) / 2;
v[tmp][i] = 0;
} else
tmp = (r - i) / 2;
for (int j = tmp + 1; j <= r; j++)
v[j][i] = 1;
} for (int i = 1; i <= r; i++) {
for (int j = 1; j < r; j++)
printf("%d ", v[i][j]);
printf("%d\n", v[i][r]);
}
}
} int main () {
int cas;
scanf("%d", &cas);
for (int i = 1; i <= cas; i++) {
scanf("%d%d", &n, &m);
printf("Case %d: ", i); init(); solve();
}
return 0;
}

fzu 1911 Construct a Matrix(矩阵快速幂+规律)的更多相关文章

  1. Construct a Matrix &lpar;矩阵快速幂&plus;构造&rpar;

    There is a set of matrixes that are constructed subject to the following constraints: 1. The matrix ...

  2. FZU 1911 Construct a Matrix

    题目链接:Construct a Matrix 题意:构造一个矩阵,要求矩阵的每行每列的和都不相同.矩阵的边长是前n项斐波那契的和. 思路:由sn = 2*(fn-1)+(fn-2)-1,只要知道第n ...

  3. 233 Matrix 矩阵快速幂

    In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...

  4. HDU - 5015 233 Matrix &lpar;矩阵快速幂)

    In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...

  5. UVa 11149 Power of Matrix &lpar;矩阵快速幂,倍增法或构造矩阵&rpar;

    题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...

  6. HDU 5015 233 Matrix --矩阵快速幂

    题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n<=10,m<=10^9),给出式子: A[i][j] = A[i-1][j] + A[i] ...

  7. 233 Matrix&lpar;矩阵快速幂&plus;思维&rpar;

    In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...

  8. UVa 11149 Power of Matrix 矩阵快速幂

    题意: 给出一个\(n \times n\)的矩阵\(A\),求\(A+A^2+A^3+ \cdots + A^k\). 分析: 这题是有\(k=0\)的情况,我们一开始先特判一下,直接输出单位矩阵\ ...

  9. HDU5015 233 Matrix —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-5015 233 Matrix Time Limit: 10000/5000 MS (Java/Others)    Memor ...

随机推荐

  1. Spring中&commat;Controller和&commat;RestController之间的区别

    1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2.  Controller, RestController的不同点 @C ...

  2. GitHub的代码托管和使用方法

    原文  GitHub托管 借助GitHub托管你的项目代码 PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把Git ...

  3. gulp api

    gulp api 简介 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成 gulp是基于Nod ...

  4. poj 1094 Sorting It All Out&lpar;图论&rpar;

    http://poj.org/problem?id=1094 这一题,看了个大牛的解题报告,思路变得非常的清晰: 1,先利用floyd_warshall算法求出图的传递闭包 2,再判断是不是存在唯一的 ...

  5. HDU 3452 Bonsai

    可以转化成最小割的求解,题目其实就是要求把点分成两个集合,增加一个超级汇点,一部分的点在根节点所在集合内,一部分节点在超级汇点所在的集合内,这两就分开了,又要求费用最小,那么就是最小割. #inclu ...

  6. hibernate 多对多关系总结

    hibernate中,对对象关系的映射处理估计是最让人迷惑和头疼的,特别是cascade和inverse属性的使用,不知已经杀死了我多少个脑细胞了,好记性永远比不上烂笔头,为了能节省自己的脑细胞,降低 ...

  7. oracle 错误码 ORA-00119 &sol; ORA-00130

    今天启动oracle时居然报错,错误信息如下: SQL> startup ORA-00119: invalid specification for system parameter LOCAL_ ...

  8. Eclipse MAT内存分析工具(Memory Analyzer Tool)

    MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...

  9. 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?

    随着消费及用户体验的需求升级.人货场的运营效率需求提升.人工智能技术的突破以及零售基础设施的变革等因素共同推动了第四次零售革命的到来,不仅在国内,国外一线巨头互联网亚马逊等企业都在研发无人驾驶.无人超 ...

  10. 从零写Java Web框架——实现Ioc依赖注入

    大概思路 通过读取配置文件,获取框架要加载的包路径:base-package,类似于 Spring 配置文件中的: <context:component-scan base-package=&q ...