Codeforces - 规律题 [占坑]
发现自己容易被卡水题,需要强行苟一下规律题
CF上并没有对应的tag,所以本题集大部分对应百毒搜索按顺序刷
本题集侧重于找规律的过程(不然做这些垃圾题有什么用)
Codeforces - 1008C
给定一个\(n\)的可重复排列,要求你更换排列的顺序,使尽量多的数占领到比自己数值小的数的所在位置
(暂时没有tutorial,有空我会加上正解做法)
其实按题目硬上应该是尽量的排序后1位错排,可是对于复杂情况无法保证
那不如按照一定顺序观察规律,只关注答案
由于值是离散的而且无顺序相关,那就很好找了
比如
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 1 2 3 4 5 6
1 1 2 2 3 4 5
1 1 2 2 2 3 4
1 1 2 2 2 2 2
容易发现答案是 n-最高频率
https://paste.ubuntu.com/p/t8N3QQ47z3/
707C
给出一个数\(n,n<1e9\),该数为三角形某一端的边长,求另外两边\(m,k\),使得该三角形为直角三角形,若不存在输出-1
首先要看-1的情况有哪些,直接打表发现除了1 2以外,其它的数只要n够大,都会有解,且部分数不止一个解(虽然没啥帮助)
观察样例
17
144 145
67
2244 2245
m和k规律很明显,相差为1,并且n*n/2±0.5就是答案,想到了这样一种可能\(a^2=(c+b)(c-b)\),令\(c-b=1\),得\(a^2=2b+1\)
然而这是奇数才有的情况,不过离答案已经不远了
再暴力一个68,得出 1155 1157, 所以?
大力猜一波68*68/4=1156
再随机验证一个172 => 7395 7397
差不多就这样了
841C
已知函数\(F(n,k)\)=\(1...n\)的集合中任选\(k\)个元素形成子集组合\(S_i\)的最小值\(val_i\)的数学期望,既\(\sum_{i} val_i/C(n,k)\)
现在给定数组\(A[1...m]\)和\(B[1...m]\),且\(A_{min}≥B_{max}\),要求重新对\(A\)排序为\(A'\),求\(\sum_{i=1}^{m}F(A'_i,B_i)\)最大值
题目有点唬人,然而too weak,直接按b大小贪心
471C
建屋子游戏,比较难简述,详细看原题
由最少需要个数
1 2
2 7
3 15
4 26
7 40
要么作差得每两项相差为3的递增序列
要么OEIS
但这是最少满足条件的,原题要求所有卡牌都用上
这时候有贪心的做法就是把多余的3的倍数放到最底层
743B
一个序列初态只有1,共n-1次操作,每次操作把序列一样的倍增,然后中间插入一个未曾出现过的最小正整数,问操作后位置k的数
由样例
第0次,1
第1次,1 2 1
第2次,1 2 1 3 1 2 1
第3次,1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
可看出插入位置的为新的子数列的出项,数\(i\)位置为\(2^{i-1}\),且每个子数列\(i\)公差为\(2^i\)
知道这些后直接暴力枚举n个数列判k在哪个就行了
616E/368C/608B