Codeforces Round #320 (Div. 2)

来源:互联网 发布:安装ubuntu双系统黑屏 编辑:程序博客网 时间:2024/06/06 08:40
<a target=_blank style="color: black" href="http://codeforces.com/contest/579">Codeforces Round #320 (Div. 2) </a>做了一场.以下是做题感受第一题: 没啥好说的,直接算出二进制位数上1的个数输出答案即可第二题:怪自己的理解能力有问题,直接排序然后从大的开始组队即可我直接暴力每次找最大的标记,700+ms过.第三题: 也是自己感觉自己最水的一题.用了一个二分查找.然后写跪了有些情况二分不对.我是根据斜率与1的大小进行比较的.感觉上能做,但是自己还是写跪了.最后看了看别人的做法...好吧纯数学题.列出线性方程y = -x + 2kp. y = x - 2kp.对于能在这个图形左边的元素,我们一定能够通过比例缩小让它在右边的下坡的直线上.所以在右边下坡时最小.而(a,b)又在直线上.这样a + b = 2kp.我们是要求出最小的p.而对于答案来说p>=b.最后列出方程组,先求2k使其最大.而2k必须为整数才可以.然后算p.对于b > a的情况,显然是没有解的.输出-1即可.第四题:首先我想到了必须是对一个数完成所有操作这样最后的结果才会更大因为对这个数操作以后一定会使得它的二进制的位数增加.这样的话既然能让它增加一位,何不让它再增加一位呢.先处理出前缀和pre[i]还有后缀和suf[i],对于每个数枚举,最后的答案就是max(pre[i-1] |(a[i] * power(x,k)) | suf[i+1]);power(x,k)表示x的k次幂第五题:不得不说,这是人生的第一道三分题目.这题是看了牛人的代码写的max sigma(i,j) |s[i,j]| = max(sigma(i,j) s(i,j) , sigma(i,j) -s(i,j))令s(i,j)为f(x),-s(i,j)为g(x)f(x)随着x的增大而减小.g(x)随着x的减小而增大.这样两者再取一个max这样就是一个凸峰的函数.用三分求解即可.而对于sigma(i,j)s(i,j)和-s(i,j)就是一个最大连续子段和和一个最小连续子段和啦~~~这样就能AC啦~~~第六题:说实话,题目看懂了,但是自己完全没有思路.就像是行走在大街上的茫然的流浪汉不知曙光在哪里.整体感觉 : 感觉能做,知识点都知道,就是缺了一把能够打开这些知识的钥匙.所以今后一定要好好训练思维.造出这把金钥匙~~~如果有哪位大神能够指点一二.在下不吝感激.并奉上2.56RMB以示我的诚挚的感谢~~~~

0 0
原创粉丝点击