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

posted @ 2018-07-14 10:00  Caturra  阅读(356)  评论(0编辑  收藏  举报