博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 1911 Construct a Matrix
阅读量:5077 次
发布时间:2019-06-12

本文共 1996 字,大约阅读时间需要 6 分钟。

题目链接:

题意:构造一个矩阵,要求矩阵的每行每列的和都不相同。矩阵的边长是前n项斐波那契的和。

思路:由sn = 2*(fn-1)+(fn-2)-1,只要知道第n-1和第n-2项即可,n的范围是10^9,可由矩阵快速幂求出第n项。然后,构造矩阵,上三角为1,下三角全为-1,对角线1和0交替。【真是个天才...!!!】矩阵快速幂求第n项时,构造的矩阵是a[0][0] = f2, a[1][0] = f1, a[0][1] = 1, a[1][1] = 0........【ACMer的脑洞真大...可怕....当然不包括我辣...】

知道思路当然就好实现了。附代码:

#include 
#include
#include
#include
using namespace std;struct Mat{ int a[2][2]; void init1() { // 斐波那契初始矩阵 a[0][0] = a[0][1] = a[1][0] = 1; a[1][1] = 0; } void init2() { //单位矩阵 a[0][0] = a[1][1] = 1; a[0][1] = a[1][0] = 0; }};Mat mul(Mat aa, Mat b, int m) { // 矩阵乘法mod m Mat ans; for (int i=0; i<2; ++i) { for (int j=0; j<2; ++j) { ans.a[i][j] = 0; for (int k=0; k<2; ++k) { ans.a[i][j] += ((aa.a[i][k]%m)*(b.a[k][j]%m))%m; ans.a[i][j] %= m; //ans.a[i][j] += aa.a[i][k]*b.a[k][j]; } //cout << ans.a[i][j] << "....\n"; } } return ans;}Mat mul_mat_quick(Mat a, int n, int m) { // 矩阵快速幂%m Mat ans; ans.init2(); while(n) { if (n%2) ans = mul(ans, a, m); a = mul(a, a, m); n /= 2; } return ans;}int num[210][210];int main() { int t; int cas = 0; scanf("%d", &t); while(t--) { int n, m; scanf("%d%d", &n, &m); Mat a; a.init1(); Mat ans = mul_mat_quick(a, n-1, m); int fn1 = ans.a[0][0]; // fn-1 int fn2 = ans.a[1][0]; // fn-2 //cout << fn1 << "++++=" << fn2 << endl; int sn = (2*fn1 + fn2 - 1)%m; //矩阵边长 // cout << sn << "===\n"; if (sn%2 || sn==0) { printf("Case %d: No\n", ++cas); continue; } printf("Case %d: Yes\n", ++cas); memset(num, 0, sizeof(num)); for (int i=1; i<=sn; ++i) { for (int j=1; j<=sn; ++j) { if (i

  

转载于:https://www.cnblogs.com/icode-girl/p/5409503.html

你可能感兴趣的文章
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>