Nyoj 302 星际旅行[矩阵乘法求两点k步方案数]

2024-06-07 03:38

本文主要是介绍Nyoj 302 星际旅行[矩阵乘法求两点k步方案数],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=302

题目意思。。n*m的矩阵。。每个元素代表一个星球,每个元素的值为所属国家,也就是每个星球属于一个国家。。每个相邻(上下左右)的星球有一个航道。每个国家的任意的两个星球都有星际之门。。。。。问,从(1,1)星球到(n,m)星球的方案数。。。相同的方案为走过的星球顺序相同。。。。。

处理一下图就是很裸的问题。。。

处理图的方式有很多中。。。

我的方法为,把二维矩阵散列到一维上。。然后,两两判断是否有通路。。然后处理到邻接矩阵中。。。。直接矩阵乘法就好。。。

Code:

 
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define LL long long
const int N = 105;
const LL mod = 1000007;
struct Matrix
{int n;LL a[N][N];Matrix(){memset(a, 0, sizeof(a));}
} ans, A;
int node[N], n;
int m, p;bool Judge(int x, int y)
{if(x - n == y) return true;else if(x + n == y) return true;else if(x - 1 == y && y % n != 0) return true;else if(x + 1 == y && x % n != 0) return true;else return false;
}Matrix operator * (Matrix a, Matrix b)
{Matrix tmpans;tmpans.n = a.n;for(int i = 1; i <= a.n; i ++){for(int j = 1; j <= a.n; j ++){for(int k = 1; k <= a.n; k ++)tmpans.a[i][j] = (tmpans.a[i][j] + a.a[i][k] * b.a[k][j]) % mod;
//            printf("k = %d\n", tmpans.a[i][j]);}}return tmpans;
}void power(int k)
{while(k){if(k & 1) ans = ans * A;A = A * A;k = k >> 1;}
}int main()
{
//    freopen("1.txt", "r", stdin);int T;cin >> T;while(T --){cin >> n >> m >> p;for(int i = 0; i < m; i ++){for(int j = 1; j <= n; j ++){cin >> node[i * n + j];}}for(int i = 1; i <= m * n; i ++){for(int j = 1; j <= m * n; j ++){A.a[i][j] = 0; ans.a[i][j] = 0;if(i == j) continue;if(node[i] == node[j]) A.a[i][j] = 1;else if(Judge(i, j)){A.a[i][j] = 1;}}ans.a[i][i] = 1;}ans.n = n * m; A.n = n * m;power(p);printf("%lld\n", ans.a[1][n * m] % mod);}return 0;
}

表示NYOJ上关于矩阵的题目数据的还是很强大的。。。。

这篇关于Nyoj 302 星际旅行[矩阵乘法求两点k步方案数]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038071

相关文章

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影