ZR提高组十连测第二测
打的很烂,总之就是很烂,总之就是又挂分了。
时间安排
8.00-8.40 读了四道题(大概看了题目意思,稍微思考了一下1.2)
8.40=9.06(查了一下交题时间) 对T1,T2的正解没有想法,就开始写T2的暴力了(并且很有梦想的写的剪枝优化80pts 让我们记住这里,我还没分段 )
9.06-9.57 和T1大眼瞪小眼,思考到了性质,开始码。
9.57-10.30 盯T3并写了一版假算法。
10.30-10.44 写T4的打表分
10.44-11.16 试图思考T3的修正,否了几个想法后放弃挣扎交了一版假算法
题目分析
T1
这个题的思路转换在于,不要从下往上验证某种方案的可行性,而是指定结果来判断是否可以由当前给定的数字得到(数字是否和给定数吻合)
可以证明,当人数一定时,结果确定时,剪刀,石头,布所需要的数量是一定的。(从上到下归纳法证明)
所以,要处理的点只是,如何按照题上要求的最小字典序输出呢?
(我比赛的时候没有考虑出来,贪心爆零了)
赛后
赛后被myf大佬提点,在第x层内,长度为 2 n − x + 1 2^{n-x+1} 2n−x+1 的一段内,前半段这个整体和后半段这个整体交换位置,最后赢家是不变的。(例如最底下一层也就是第x层,剪刀和布的结果与布和剪刀的结果没有差别)。
所以从最底层往上排序就好(虽然只是三层循环,但也有些细节考虑)
在字典序的处理上,还是很有意思的一道题。
T2
当时的想法就是,硬找倍数。
而且考虑到,对于一个数字的10倍以内,它的个位数是确定的,再加它的十倍时,个位数字不变。
所以我当时的想法是,根据给定的数字,框定十倍里的数有用的是哪几个,然后每次取一个加10倍。
注意的细节是,尾数小的数值不一定小,并且尾数相同的数可能不只有一个。
而且最后修正之后也没跑过80
赛后
听wxh大佬说,可以直接用存在的数位去凑可能符合的数然后验证,就可以有80。
(wxhtxdy)
T3
很有意思的一道题
暴力不太好打,因为考虑到,尽管可以二分加边的数量,或者是状压枚举加哪几条边,但是验证的时候,条件是任何一种加边方式都可以,所以硬暴力会是一个全排列的复杂度。
对这个题还挺感兴趣的。
T4
没什么想法,硬求拓扑序数的话,是点数的2^ 指数级的
赛后反思
1.呃,感觉最近总是有一些想法,但距离正解又差一些,到了正解的一半吧,另一部分却不怎么能考虑得到。
2.最近细节,边界问题写的比较差) ∠(ᐛ」∠)_