当前位置: 首页 > news >正文

2020牛客暑期多校第五场 E - Bogo Sort(思维/LCM)

题目链接


比赛时写了Java大数但是没想到不需要取模,orz…

给定数组 p p p对一个 n n n个数的排列做下列置换操作:

void shuffle(int a[], int n) {
    int b[n];
    for (int i = 0; i < n; i++) {
        b[i] = a[i]
    }
    for (int i = 0; i < n; i++) {
        a[i] = b[p[i]];
    }
}

手动模拟两个例子,我们会发现实际上能够形成排列只和环中的数目有关:
在这里插入图片描述
该样例的答案是 6 6 6
在这里插入图片描述
该样例的答案是 2 2 2

因为一个环在不断进行 s h u f f l e shuffle shuffle的过程中所有的数会不断交换位置,那么一个环形成的组合数也就是环中数的个数,那么考虑使用并查集求出所有的环,最后对所有个数求 L C M LCM LCM,因为数据很大,使用Java

PS:题目说的取模实际上就是个陷阱,最坏情况是分成若干个质数之和,可以在小范围内寻找一些数据测试一下,因为素数的分布是越向后越稀疏,那么若干个素数之和等于 N N N,其乘积肯定小于 1 0 N 10^N 10N

心得:我们写出来就是在取模不取模犹豫不决,然后没敢去尝试,说白了一些猜想或者推理在比赛同样重要,与其写不出来,试一下又何妨?

import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class Main {
	
	static int f[]=new int[100010];
	static int p[]=new int[100010];
	
	static int find(int x) {
		if(f[x]==x) return x;
		else {
			int t=find(f[x]);
			f[x]=t;
			return f[x];
		}	
	}

	public static void main(String[] args) {
		int n;
		Scanner scanner=new Scanner(System.in);
		n=scanner.nextInt();
		for(int i=0,x;i<n;i++) {
			x=scanner.nextInt();
			p[i]=x-1;
			f[i]=i;
		}
		for(int i=0;i<n;i++) {
			if(p[i]!=i) {
				int fx=find(i);
				int fy=find(p[i]);
				if(fx!=fy) f[fy]=fx;
			}
		}
		HashMap<Integer, Integer> book=new HashMap<>();
		for(int i=0;i<n;i++) {
			find(i);
			int cur=(book.get(f[i])==null?0:book.get(f[i]));
			book.put(f[i], cur+1);
		}
		BigInteger ans=BigInteger.ONE,Mod=BigInteger.ONE;
		for (Entry<Integer, Integer> entry : book.entrySet()) {
			BigInteger temp=BigInteger.valueOf(entry.getValue());
			ans=ans.multiply(temp).divide(ans.gcd(temp));
		}
		System.out.println(ans);
	}
}

相关文章:

  • 青蛙故事的感悟
  • 2020牛客暑期多校第五场 I - Hard Math Problem(思维)
  • 最近一周内央视的三个错误
  • 洛谷P1714 切蛋糕(单调队列经典问题)
  • 磁盘文件的正常读写与异步读写
  • 洛谷P1725 琪露诺(单调队列+dp)
  • Linux wait_on_buffer函数研究
  • POJ - 2796 Feel Good(经典单调栈)
  • 基于Linux0.11源代码的操作系统内核典型处理过程分析1
  • POJ - 3494 Largest Submatrix of All 1’s(单调栈+降维)
  • 在批处理文件中实现按日期命名的目录迁移
  • HDU - 6806 Equal Sentences(dp)
  • UltraWinGrid自适应列宽/行高
  • HDU - 6812 Kindergarten Physics(分块/规律)
  • UltraGrid 卡片模式列自适应宽度
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《剑指offer》分解让复杂问题更简单
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CAP 一致性协议及应用解析
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • gulp 教程
  • markdown编辑器简评
  • PHP的类修饰符与访问修饰符
  • python docx文档转html页面
  • Redis中的lru算法实现
  • Swoft 源码剖析 - 代码自动更新机制
  • 机器学习中为什么要做归一化normalization
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 力扣(LeetCode)357
  • 三分钟教你同步 Visual Studio Code 设置
  • 实现简单的正则表达式引擎
  • 学习笔记TF060:图像语音结合,看图说话
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 找一份好的前端工作,起点很重要
  • Semaphore
  • !!java web学习笔记(一到五)
  • $ git push -u origin master 推送到远程库出错
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (pojstep1.1.2)2654(直叙式模拟)
  • (办公)springboot配置aop处理请求.
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (六)软件测试分工
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十一)手动添加用户和文件的特殊权限
  • (四)模仿学习-完成后台管理页面查询
  • (转载)OpenStack Hacker养成指南
  • ***原理与防范
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core 6 集成和使用 mongodb
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET DataGridView数据绑定说明