首页 > 编程语言 >2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛(正式赛)H-Cute Rabbit

2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛(正式赛)H-Cute Rabbit

时间:2023-05-08 15:14:13浏览次数:58  
标签:10 竞赛 min 全在 最小值 gcd% forall 程序设计 lcm

官方题解:
https://blog.csdn.net/qq_62464995/article/details/127493921

题目大意

给出数组a[i],将a分成两个数组x和y,使得\(\forall x[i]\% y[j]\)都相等(\(|x|,|y|>0\))
构造一组\(|y|\)最大的方案

n<=1e5,1<=ai<=1e6

题解

神必结论题

先假设a不是全部相等

结论1:最小值一定只能全在x或y
证明:若最小值min在x和y都有,则模数s=0,发现此时把x的所有min移到y合法且更优
因为s=0,所以如果y里面有大于min的数t,则x的min%y的t=min>s=0,所以y中没有大于min的数
即,所有大于min的数都在x里面,则此时把x中的min移到y之后x不会为空,合法

最小值全在x,则剩下的数全放到y是合法且最优的(y里面都大于min,x%y=min,全相等),判断掉
接下来考虑最小值全在y的情况:

结论2:设最小值min全在y,若一个数a>min在x,则所有大于a的数b都必须在x
证明:若存在b在y,则y中既有min又有b,a%min<a,a%b=a,矛盾,故b必须在x

根据结论2可以发现,合法的方案就是把原始的a[i]排序后,取前缀丢x、剩下的后缀丢y,枚举所有的前缀情况

由于x和y不能为空,所以a[1]和a[n]一定分别在y和x,所以s=a[n]%a[1]<a[1]

那么得到了s,把所有的x减去s,则变成\(\forall (x[i]-s)\%y[j]=\forall x'[i]\%y[j]=0\)

对x'求gcd,对y求lcm,若gcd%lcm=0成立,否则不成立
正确性:
\(\forall i,j\),若gcd%lcm=0,因为x'[i]%gcd=0、lcm%y[j]=0,而gcd%lcm=0,则有x'[i]%y[j]=0,成立
gcd%lcm≠0,则存在某个质因子p,gcd中的p的次数a<lcm中的p的次数b
并且一定存在某两个数x'[i0]和y[j0],使得它们分别贡献了\(p^a\)和\(p^b\)
那么由于\(p^a\%p^b ≠0\),所以x'[i0]%y[j0]≠0,不成立

所以根据gcd和lcm即可判断所有x'[i]和y[j]的关系,时间O(nlogn)

code

不是我写的

标签:10,竞赛,min,全在,最小值,gcd%,forall,程序设计,lcm
From: https://www.cnblogs.com/gmh77/p/17381796.html

相关文章

  • 108中超轻量级的加载动画!
    大家好,我是【程序视点】小二哥!今天要上的菜不是Animate.js,也不是Move.js,而是能提供108种加载动画的库:Whirl.最省力的加载动画话不多说,直接来看例子。以上只是冰山一角。whirl的CSS加载动画集合中有108种选项供你挑选。选中喜欢的动画后,点击“GrabtheCSSonGithub......
  • 1075. 项目员工 I
    【题目】项目表Project:+-------------+---------+|ColumnName|Type   |+-------------+---------+|project_id |int    ||employee_id|int    |+-------------+---------+主键为(project_id,employee_id)。employee_id是员工表Employee表的外键......
  • 「微服务」这10道Consul面试题值得一看
    前言Consul是一种非常强大的分布式服务发现和配置管理工具,它可以帮助开发人员和运维人员更好地管理和维护分布式系统。但是,使用Consul也需要投入一定的人力和物力,需要根据实际情况进行选择和使用。什么是Consul?Consul是一种分布式服务发现和配置管理工具,它可以用于服务......
  • Acwing周赛102
    倍增这是一道简单数论题usingnamespacestd;typedeflonglongLL;constintN=1e5+10;inta[N],n;intdiv(intx){if(x%2==0)while(x%2==0)x/=2;if(x%3==0)while(x%3==0)x/=3;returnx;}intma......
  • win10完美去除快捷方式小箭头的方法
    网上有多种修改注册表的方式去除快捷方式小箭头,但容易导致任务栏不能使用,接下来介绍一种批处理的模式。 1.去掉小箭头复制以下代码到TXT文档,并保存。保存后修改.txt后缀为.bat,如果电脑不显示后缀,可以在我的电脑-查看-勾选文件扩展名。完成后以管理员身份运行即可regadd"HK......
  • leetcode 101 对称二叉树 Simple
    题目给你一个二叉树的根节点root,检查它是否轴对称。输入:root=[1,2,2,3,4,4,3]输出:true输入:root=[1,2,2,null,3,null,3]输出:false题解考察二叉树的遍历,使用广度优先BFS方法.BFS的关键在于使用队列,遍历树时,读到的节点先入队,再出队,出队时读取值,放入结......
  • 2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛(正式赛)A-Tree
    官方题解:https://blog.csdn.net/qq_62464995/article/details/127493921题目大意给出一棵边权为1的树,构造排列p,使得①p[1]=1②dis(p[i],p[i+1])<=k题解神必防ak题当k=1时,显然只能是从1开始的一条链当k>=3时,一定有解,考虑构造:把树上的点按层黑白黑白染色,dfs遍历整棵树,在第......
  • 【面向对象依赖关系概念总结】面向对象程序设计的五种依赖关系
    ​目录 简介继承关系聚合关系组合关系关联关系依赖关系总结 简介        面向对象程序设计中,要实现复杂的模块化系统,需要将系统划分为多个对象并组织它们之间的关系,这就涉及到常说的面向对象五大依赖关系。这五种依赖关系分别是:继承、聚合、组合、关联和依......
  • vs2010单元测试
    一、     实验目的1、 掌握单元测试技术,并按单元测试的要求设计测试用例。 2、 掌握一种单元测试工具的使用。二、 实验内容自行学习vs2010或vs2012或vs2015等单元测试工具的使用。对下面被测代码进行测试且查看代码覆盖率,并录制操作视频,撰写实验报告。三、 设......
  • 爬虫 202107【JavaPub版】
    写于2021071117:10北京朝阳区@[toc]方法:首先下载mitproxy,pip安装方法:>pipinstallmitmproxy基本使用方法:给本机设置代理ip127.0.0.1端口8001(为了让所有流量走mitmproxy)具体方法请百度。启动mitmproxy。windows:>mitmdump-p8001Linux:>mitmproxy-p80012.修改chromedriver......