2018年11月18日训练总结

这周基本没看什么资料。做了几道题。。。

打了两场cf的比赛,一场div.2 ,一场div.3 虽说总体来说上了几十分,但是还是因为读题的问题挂了终测(两场都挂了一道)

题目很简单,但是没读对。div.2那场A挂了终测(读错题),B不会(质因子分解),说明对分解质因子类的题目还是不敏感。D题也没读懂。。。

div.3前三道题暴力,第四道简单二分,第五道dp(O(n))或者枚举+二分+暴力(O(nlognlogn)),dp的做法没想到,思想还是比较重要。第六道暴力三维dp,第七道是第六道加单调队列优化(很经典)。比赛的时候知道是这个做法但是没调出来,赛后看了别人的代码才会写。这两天一直在想这个题,从想出算法,到设计思路,到代码实现,到一些细枝末节,直到最后出结果是怎么考虑的。

压缩掉的第三维是上一次在哪天买的。dp[i][z]表示前i天买了z件衣服的最大值(其实是第i天一定买了衣服)

dp[i][z]=dp[i-j][z-1]+a[i]。这里的j就要求和i的距离小于k了。显然z确定后,dp[i][z]的值随着i的增大而增大(且满足决策单调性)。同时还要注意不合法的-1情况。因此对每个z用一个单调队列压缩掉第三维,初始队列压入(0,dp[0][z-1])队头据i>k天就队头出队,dp[i][z]=队头+a[i]。

dp[i][z-1]>=队尾队尾就出队。然后(i,dp[i][z-1])入队。注意队头>队尾直接break。

这个单调队列优化dp的用法我还是不能熟练掌握,还是需要多加的练习和思考。

然后打了去焦作的队伍的练习赛。除签到题外,有一道求最小比率区间size(l,r)/(r-l+1)的题。乍眼一看又是分数规划,考虑二分答案。设为mid,则size(l,r)/(r-l+1)<=mid(size(l,r)为下标l~r中不同的数字个数)

移项变形,得size(l,r)+l*mid<=mid*(r+1)     参考题解​​​​​​​

但是我没想到左边这个可以用线段树维护。。。(参考线段树离线求区间不同数字个数的思路),线段树初始化为l*mid,然后二分答案mid,对于每个mid,枚举区间右端点r,然后对于a[i],update(pre[i]+1,i,1,1,n)。(pre[i]为i上次出现的位置。)然后查询1~i的最小值和mid*(r+1)比较一下就行了。总复杂度(O(nlognlogn))。。。并不是很难理解,但是场上过的人数很少。

还有一道求x的k次方的因子个数,实际上x的因子个数为(1+r1)*(1+r2)*...*(1+ri) ri为其质因子的幂次。d(n)里n的取值最大1e12,那么要判断它是不是素数只需计算到sqrt(n),所以打个1e6的素数表,如果它是个合数,就可以用打好的表里的素数进行分解,如果是个素数,那么它对最后结果的贡献就是k+1。参考题解

而本题答案为(1+k*r1)*(1+k*r2)*...*(1+k*ri) ri为其质因子的幂次。由于是求某个区间的,所以与处理一下1e6以内的质因子,然后

然后就是欧洲今年的某场区域赛。。。2个小时才做出来签到题。。。(二分+前缀和,也可用树状数组,不过细节很麻烦,还要分情况讨论)。。。唉,真是菜,继续努力。

新生赛的报名已经开始了好几天,人数已经快破百了。。。希望之后报名人能少一些,机房也只能装最多180人。。。(而且人一多服务器会很卡)学长们基本已经出完了题目,坐等15周周末(或16周周末)比赛。。。希望新生们好好努力,早日超越我们这些老菜鸡。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值