java实现第五届蓝桥杯幂一矩阵
幂一矩阵
天才少年的邻居 atm 最近学习了线性代数相关的理论,他对“矩阵”这个概念特别感兴趣。矩阵中有个概念叫做幂零矩阵。对于一个方阵 M ,如果存在一个正整数 k 满足 M^k = 0 ,那么 M 就是一个幂零矩阵。(^ 表示乘方)
atm 不满足幂零矩阵,他自己设想了一个幂一矩阵:对于一个方阵 M ,如果存在一个正整数 k 满足 M^k = I ,其中 I 是单位矩阵,那么 M 就是一个幂一矩阵。
atm 特别钟情于这样一种方阵:每行每列有且仅有一个 1 。经过 atm 不断实验,他发现这种矩阵都是幂一矩阵。
现在,他的问题是,给定一个满足以上条件的方阵,他想求最小的 k 是多少。
【输入格式】
第一行一个正整数 n ,表示矩阵大小是 n * n 。
接下来 n 行,每行两个正整数 i j 表示方阵的第 i 行第 j 列为 1。
1 <= i, j <= n 。
行号,列号都从1开始。
【输出格式】
一行。一个正整数,即题目中所说最小的 k 。
【样例输入】
5
3 1
1 2
4 4
2 3
5 5
【样例输出】
3
【数据范围】
对于 30% 的数据满足 n <= 10
对于 60% 的数据答案不超过 10^18
对于 100% 的数据满足 n <= 10000
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner;
public class 第五题 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
//创建索引数组num[n]
int[] num = new int[n];
for(int i = 0;i<n;i++){
//输入数组,注意要-1,因为题目说输入的行和列都是以1开始
num[in.nextInt()-1] = in.nextInt()-1;
}
//这里vis数组为了加快循环
boolean[] vis = new boolean[n];
//max存储最终结果
long max = 1;
//从原数组的第0行开始,寻找搜索
for(int i = 0;i<n;i++){
//如果当前行已经被搜索过,直接continue
if(vis[i]){
continue;
}
//count记录搜索次数(题目说对于 60% 的数据答案不超过 10^18 ,这里以防万一,用long)
long count = 1;
//s为每次搜索的数组下标索引
int s = i;
//当前第s行被搜索了,记录vis数组
vis[s] = true;
//当索引与值不相等时就继续循环
while(num[s] != i){
//每次循环一次count+1
count++;
//当前索引对应的值是下一次的索引
s = num[s];
//当前索引对应的行被搜索过,记录vis数组
vis[s] = true;
}
//搜索结束,判断搜索结果是否能被max整除
if(max%count!=0){
//计算max和count的最小公倍数存入max
if(max>count){
max = max*count/gcd(max,count);
}else{
max = max*count/gcd(count,max);
}
}
}
//输出最终结果
System.out.println(max);
in.close();
}
private static long gcd(long max, long count) {
//辗转相除法求最大公约数
if(max%count==0){
return count;
}
return gcd(count,max%count);
}
}
java实现第五届蓝桥杯幂一矩阵的更多相关文章
- java实现第五届蓝桥杯殖民地
殖民地 带着殖民扩张的野心,Pear和他的星际舰队登上X星球的某平原.为了评估这块土地的潜在价值,Pear把它划分成了M*N格,每个格子上用一个整数(可正可负)表示它的价值. Pear要做的事很简单- ...
- java实现第五届蓝桥杯斐波那契
斐波那契 标题:斐波那契 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 ...
- java实现第五届蓝桥杯切面条
切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以得到3根面条. 如果连续对折2次,中间切一刀,可以得到5根面条. 那么,连续对折10次,中间切一刀,会得到多少面条 ...
- java实现第五届蓝桥杯LOG大侠
LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力- 变换的规则是: 对其某个 ...
- java实现第五届蓝桥杯生物芯片
生物芯片 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的 ...
- java实现第五届蓝桥杯供水设施
供水设施 X星球的居民点很多.Pear决定修建一个浩大的水利工程,以解决他管辖的N个居民点的供水问题.现在一共有N个水塔,同时也有N个居民点,居民点在北侧从1号到N号自西向东排成一排:水塔在南侧也从1 ...
- java实现第五届蓝桥杯排列序数
排列序数 如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号: abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bac ...
- java实现第五届蓝桥杯锦标赛
锦标赛 这题小编能力有限,还望大佬解决 题目描述 如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?我们可以从体育锦标赛中受到启发. 如图[1.pn ...
- java实现第五届蓝桥杯神奇算式
神奇算式 题目描述 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求 ...
随机推荐
- CSS:必须要掌握的重要基础知识点
目录 1. 盒子 2. 常用选择器 3. 优先级 4. CSS继承 5. 伪元素(pseudo-element)和伪类(pseudo-class) 6. CSS:元素定位机制(positioning ...
- jar包名修改工具
jar包名修改工具 软件传送门:链接: https://pan.baidu.com/s/12StRdEkYGmMn1DuNSquXSw 提取码: i9w1 闲暇之余,利用jarjar.jar写了一 ...
- tp5分页数据
paginate分页完成之后,生成的分页数据是对象形式存在的,所以如果要调用其分页的数据,比如想要遍历修改数据中的值,等需要进行 foreach操作的地方,需要使用 $re=Db::->tabl ...
- layui的layer.msg,form提交
layer.msg('提示文字',{shift:1,time:2000},function(){ location.reload();});其中shift是提示框的动画样式,-1为无动画form.on ...
- 6-JVM常用工具和优化
JVM 常用工具和优化 JDK 自带的 jconsole jvisualvm 三方的工具 arthas 调优关注点(内存.GC): 内存 MAT XElephant 在线:perfma GC 拿到GC ...
- 导出word excel 方法
---导出excel public static void DataTableToExcelXjd(DataTable dt, string Title, string TmpColsName) { ...
- STM32 Keil 软件仿真设置
设置 Dialog.DLL 分别为:DARMSTM.DLL和TARMSTM.DLL, Parameter 均为:-pSTM32F103RC,用于设置支持芯片的软硬件仿真
- (STL初步)映射:map
map就是从键(key)到值(value)的映射. 因为重载了[]运算符,map像是数组的”高级版“. 例如,map<string,int>month_name 表示:”月份名字到月份编号 ...
- python常见面试题讲解(二)计算字符个数
题目描述 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字 ...
- mysql中的联合查询(内联、左联、外联、右联、全联)
转 https://www.cnblogs.com/withscorpion/p/9454490.html 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left oute ...