2021/11/1模拟赛

7 : 50 − 8 : 00 7:50 - 8:00 7:508:00
看题,一看到第二题就感觉是个 二分,然后看第三题的时候脑子里还是第二题,所以先把第二题码了。时间复杂度 O ( N 2 ∗ l o g N ) O(N^2*log_N) O(N2logN)
8 : 00 − 9 : 00 8:00 - 9:00 8:009:00
搞完这个 T 2 T2 T2 的二分。
先按照度数sort一遍,然后二分出来答案 K K K ,判断的时候就双重for循环看每两个点是否能连到一起,最后扫一遍看每个点的度数,如果是完全图的话每个点的度数肯定就是 n − 1 n-1 n1了。
又看了看其他题,感觉还是 T 1 T1 T1 最可做。
9 : 00 − 9 : 30 9:00 - 9:30 9:009:30
T 1 T1 T1 20 20 20 分全排列DFS写出来。
9 : 30 − 9 : 40 9:30 - 9:40 9:309:40
思考用压到二进制上做 T 1 T1 T1
9 : 30 − 10 : 10 9:30-10:10 9:3010:10
搞出来刚刚的想法
10 : 10 − 10 : 25 10:10 - 10:25 10:1010:25
又看其他题,并且在没有特别好的想法的情况下,写出来造 T 1 T1 T1 数据的代码和对拍程序开始拍。
10 : 25 − 11 : 00 10:25-11:00 10:2511:00
针对拍出来的问题进行修改,并且反复拍,但是一直有问题,所以只留了 20 20 20 分的代码。
11 : 00 − 11 : 10 11:00-11:10 11:0011:10
思考 T 3 T3 T3 T 4 T4 T4 ,主要在推 T 3 T3 T3 ,没写出什么部分分的代码,着手 T 4 T4 T4
11 : 10 − 12 : 00 11:10 - 12:00 11:1012:00
觉得 T 4 T4 T4 可以暴力取出前头的一段区间和尾部的一段区间,尾部的乘个 − 1 -1 1,用二分的方法分别求逆序对看需要换几次位置。但是可能这个想法是错的?没能过掉三个样例,感觉一开始树状数组搞可能会好一点吧。


T 2 T2 T2 写挂了,题解中说用队列 O ( N 3 ) O(N^3) O(N3)。但是我查了查错,发现原来我直接双重for循环可能出现
在这里插入图片描述所以可以再套个while循环判断这次的双重for循环是否造成贡献,如果无影响就跳出来,这样的话时间复杂度上会多一个小常数,即这个while循环的运行次数,在这道题的数据中究竟得是多少呢?
在这里插入图片描述
虽然不能算是保证,但是在这些数据中应该是 10 10 10。(我把双重for循环复制到 10 10 10 次后正好能过)。虽然数据造的巨无比强的话可能不止 10 10 10次,但感觉还不至于是题解中队列的 O ( N 3 ) O(N^3) O(N3) 。因为很粗略想一下如果每次连 1 1 1 个边的话,可能确实是 O ( N 3 l o g N ) O(N^3log_N) O(N3logN) ,可是不可能一次只连一个,总要把某个点的度数堆得很高,然后必然可以一下连好多好多边。

T 4 T4 T4 果然得上树状数组,按照从小到大的顺序枚举每个数,每次选择将这个数放在序列的左边或右边。其中还有个比较显然的性质,即“每次放到左边或右边需要移动的次数是初始序列中左边或右边比这个数大的数的个数,与其它数选择放在左边还是右边无关”。
考试的时候压根没在想推性质,光想着之前好像做过有题让通过相邻两数swap使得数列满足单调上升,然后方法是求逆序对,然后这个题就直接莽了点,前头求一下,后头乘 − 1 -1 1,再求一下,最后相加。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值