2019.01.27【NOIP提高组】模拟 B 组

又是茹科夫组织
今天题目感觉有点难度两边分化
对了

第一题11:27分开始运行
评测完上一题再交?
11:30结束,交一道题一分多钟
您还要我交题么?怎么比赛?
T1:
日常签到题。
因为ai=ai-1*3 ai+1=ai*3
反正很容易推出a1~i的和小于ai+1
那么我们可以发现,设前i个数最大组合的编号为k
那么第i+1个数加入后,第k+1小即为第i+1个数
k+2小为原来的第一小加上第i+1个数
也就是说,k个数 a[i+1] 那k个数(+a[i+1]后的)
且顺序不变。因为都是从前面推过来的。
所以,假设现在枚举到第3个数
原数列:1 3 4 k=3
第4个数:9
第4+1~4+k个数:1+9 3+9 4+9
即1 3 4 9 10 12 13
还很容易看出k=k*2+1
然后就很简单了。。。
T2:
不会,暴力度日

必须吐槽C++语言优势
打出正解,交上去T60
隔壁HGDdl说他暴力就过了,无需优化。???
四处找人问优化
1.把前向星改成预处理,o1判,没过,70
2.在某大佬提醒下去掉mod,最后计算,没过,80
3.去掉continue,计算答案时也不mod(然而没什么用)
4.由于计算二进制下有多少个1会算重,提到前面算,80
5.去掉判断,重赋初值,增加变量,改为位运算,减少运算次数,90,1900ms
6.在另一dl提醒下,将枚举下一个与枚举次数交换,限制枚举次数,90,1600ms
7.最终去掉读入数组,改为变量,100,1000+ms。
真是痛快,真多时间。
有人说不是C++优势
那我问一下,为什么前五页只有倒数第二是pascal?
为什么pascal最快才988ms?
超时的pascal为什么都是一步一步优化上去的
T3:
不会,暴力度日,加了个优化。

原来是分治
对于当前l,r,我们有两种情况
1.a,b不跨mid
2.a,b跨过mid
第一种情况可以通过递归l,mid和mid+1,r求出
第二种情况题解讲的很清楚
数组有三个
p[i]表示mid+1~i的最小值
q[i]表示mid+1~i的最大值
ss[i]表示mid+1~i每个位置上最大值乘最小值的和
注意:数组要开到0和n+1
三个数组下标为mid的要用0覆盖
记住:小心算术运算上溢
小心算术运算上溢
小心算术运算上溢

第一题过水,都不怎么用想,随便找规律都能找出来
第二三题较第一题难很多
所以肯定一堆100+。

愿意打暴力于是捞了个第七
真爽
真爽
真爽
2019.01.27【NOIP提高组】模拟 B 组_第1张图片
实名谴责第一题

你可能感兴趣的:(B组,比赛总结)