题目链接:Construct a Matrix

题意:构造一个矩阵,要求矩阵的每行每列的和都不相同。矩阵的边长是前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 <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
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<j) num[i][j] = 1;
else num[i][j] = -1;
}
}
int pre = 1;
for (int i=1; i<=sn; ++i) {
num[i][i] = (pre^1);
pre ^= 1;
}
for (int i=1; i<=sn; ++i) {
for (int j=1; j<=sn; ++j) {
if (j==1) printf("%d", num[i][j]);
else printf(" %d", num[i][j]);
}
printf("\n");
}
}
return 0;
}

  

FZU 1911 Construct a Matrix的更多相关文章

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

    题目链接:fzu 1911 Construct a Matrix 题目大意:给出n和m,f[i]为斐波那契数列,s[i]为斐波那契数列前i项的和.r = s[n] % m.构造一个r * r的矩阵,只 ...

  2. fzu 1911 C. Construct a Matrix

    C. Construct a Matrix Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 32768KB Special Judge ...

  3. Construct a Matrix (矩阵快速幂+构造)

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

  4. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

  5. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  6. ACM--[kuangbin带你飞]--专题1-23

    专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 FliptilePOJ 1426 Find T ...

  7. <转载> OpenGL Projection Matrix

    原文 OpenGL Projection Matrix Related Topics: OpenGL Transformation Overview Perspective Projection Or ...

  8. Palindromic Matrix

    Palindromic Matrix time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】

    任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...

随机推荐

  1. 使用@ContextConfiguration注解后,提示找不到配置文件

    intellij提示找不到配置文件 错误代码如下: 严重: Caught exception ] java.lang.IllegalStateException: Failed to load App ...

  2. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

  3. iOS - Swift Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  4. Redis高级实践之————Redis短连接性能优化

    摘要: 对于Redis服务,通常我们推荐用户使用长连接来访问Redis,但是由于某些用户在连接池失效的时候还是会建立大量的短连接或者用户由于客户端限制还是只能使用短连接来访问Redis,而原生的Red ...

  5. [转载] 每个 Python 程序员都要知道的日志实践

    原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...

  6. Android应用程序构成

    一个Android应用程序一般是由以下4个组件构成的: 活动(Activity) 意图(Intent) 服务(Service) 内容提供器(Content Provider) 这4个组件是构成andr ...

  7. Android网络编程系列 一 TCP/IP协议族之网际层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网 ...

  8. Java用webSocket实现tomcat的日志实时输出到web页面

    原文:http://blog.csdn.net/smile326/article/details/52218264 1.场景需求 后台攻城狮和前端攻城狮一起开发时,经常受到前端攻城狮的骚扰,动不动就来 ...

  9. hdu 5713(状态压缩DP)

    要进行两次dp, 第一个,dp[i],1<=i<=(1<<n) 其中用i的二进制形式表示已选择的点. dp[i] 用来保存i中的点构成一个连通块,边集多少种可能. 转移方程: ...

  10. 怎么进入BAT的研发部门?

    怎么进入BAT的研发部门? ======================================剑指offer+leetcode+geeksforgeeks+编程之美+算法导论====秒杀BA ...