导航菜单
首页 >  蓝桥杯javac组真题  > 2022年第十三届蓝桥杯省赛C组个人题解(JAVA)思路讲解

2022年第十三届蓝桥杯省赛C组个人题解(JAVA)思路讲解

这题不用多说,排序就行了

直接枚举肯定超时,我们先求出所有四位的合法串,例如(2022,0001,0002),然后依次在合法串中枚举年份、月日、时间,然后组成日期检查合法性,合法串大概有360,然后判断年月日时间是不是同一个三位数和一位数

 这题没啥说的,每次取最大值赋给长边,最小值赋给短边,然后长边/2, 依次迭代几次就出来了

暴力会超时,找规律发现 a1 * (a2 + a3 + .. + an) + a2*(a3 + a4 + ..) + ... + an-1 * (an),预处理后缀和,然后0(n)的时间复杂度可以过

首先最多只有八条边,只要三个矩形紧凑边一定可以凑出八条边的(可自行画图模拟),

然后我们枚举四条边的情况(可旋转):

 接着是六条边的情况      :

然后都没有就是八条边,直觉告诉我应该有公式可求,但是我最后还是写成了模拟

这题的x特别大,可能输入的时候就会爆long了,所以这是一个坑点,所以我直觉认为这题应该是trie树,只是没想到区间内选两位的trie树怎么求,所以我还是直接暴力了:用了点小技巧,先预处理保存了每个数和其他数异或为x的,然后排序,然后枚举区间内每个数的预处理数(异或为x的数),看边界是不是在区间里有交集(某个大佬说要用莫队分块...反正我听都没听过)

直接暴力肯定不可求,然后发现a+k 和 b+k的差值是固定的,并且a和b不同,假设最大公约数是D,那么a+k = x*D;b+k = y*D; x!=y; 且 |yD - xD| = |b - a|; |y-x|*D=|b-a|;D = |b-a|/|y-x|;x和y和D是整数,我们想使D最大,那么使y-x最小,由于y!=x,所以y-x最小取到1,可得到D此时为b-a, 得到公式(a + k) % |b-a|  == 0,k = |b-a|  - (a % |b-a|);特殊处理,如果此时 a % |b- a| == 0,那么k为0 

首先发现答案具有两端性,所以我们可以先二分,关键在于怎么判断len是否成立, 首先看任一段长度为len的区间[l, r];因为最多跳len,所以我们发现我们来回一定会经过区间内任一点,总共来回2*x次,区间内总和如果 < 2*x ,那么肯定不够来回的。所以我们枚举每一段长度为len的区间,如果区间内总和

相关推荐: