Codeforces Round #187 DIV 1

题目链接



B题:事实证明是sb题,而且证明自己比题目还傻。。
C题:设dp[i]表示当前以数字i结尾的所有合法子序列乘积的总和(非递减),那么新插进来一个数K的时候,我们要更新dp[K],
dp[K] =( dp[0] + dp[1] + dp[2] +... + dp[K] ) * K  - dp[K]; 所以要用到个东东动态统计前缀和
比如1 2 3 3
插入最后一个3的时候,前面有这么写东西(1) (2)(3)(1 2)(1 3) (2 3),然后插入一个3相当于在每一项的后面增加一个
3,但是别忘了要减去原来以3结尾的,因为算重复掉了。
http://codeforces.com/contest/314/submission/3843964
D题:先膝跳反射想到二分, 但如果不将坐标系旋转,很难搞,,,以后这种题尽量把坐标旋转也当成非条件反射好了。。
我们可以将点的坐标逆时针旋转45度,,这样子题目中的那两条相互垂直的线就分别跟坐标轴平行了。。
然后
1 : 旋转45度(x,y) ->(x-y,x+y)(这个方法将坐标之间的距离也扩大了sqrt(2)),坐标仍然为整数,比较好。。
2 : 最短的曼哈顿距离是最短距离的sqrt(2)倍,所以如果是将原图不变的旋转,算出的答案要乘sqrt(2)
3 : 验证的时候只需要维护两条距离为2*mid的竖线扫过去,然后如果在竖线外部的点的Y的最大值与最小值之差小于等于2*mid,当前位置就可以放两条线了,一条在两条竖线中间,另一条在外部的最高点与最低点中间。。
http://codeforces.com/contest/314/submission/3854573

Summary : 比赛的时候思维还是不够独立,都只能想个大概,以后直接从B题开始看好了,,后面的做出一个再去看看A。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值