【解题报告】CF Round #320 (Div. 2)
Raising Bacteria
题意:盒子里面的细菌每天会数量翻倍,你可以在任意一天放任意多的细菌,最后要使得某天盒子里面的细菌数量等于x,求至少要放多少个细菌
思路:显然,翻倍即为二进制左移一位,那么放入一个细菌,到第二天就变成2个二进制下即为1->10对于任意二进制数 如:1001110,只需要在第一天放1个,第4、5、6天各放一个,再等一天,就可以了。所以答案显然是x在二进制下1的个数。
Finding Team Member
题意:2n个人,每两个人组合的队伍有aij的力量。每个人都希望组合的队伍力量最大。求最终会怎么组合。
思路:找出矩阵中最大的那个数字aij,显然ij会组成一队,然后ij已经组队了,把和ij有关的行列都删除,然后再找出剩下的最大组合。依次类推即可以出答案。
直接在矩阵中找显然会超时。我们可以把矩阵的每条排序,然后从大到小依次扫描并标记每个人的队友,扫描到一个值的时候先判断对应的ij是否已经组队,如果已经组队就跳过这一项。
A Problem about Polyline
题意:折线经过点(0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ...。给定一个坐标(a,b)求最小的x使得折线经过点(a,b)。
思路:先计算出经过那点之后第一次碰到x轴的位置的坐标(a+b,0),然后求出这个点的x坐标在总的几分点上。即(a+b)/b。然后向上取到2的倍数,即为这段折线有多少条线段组成。然后就可以计算x了。
"Or" Game
题意:给定一个数列,你可以操作k次,每次选择其中的一个数字把它乘以x,求这样操作完成后,使所有数字进行或运算的结果最大。
思路:考虑所有数字的二进制。如果有一个数字的二进制位数最大,那么一定是把所有操作都用在这个数字上,因为乘以x之后这个数字的二进制位数会增加,而且所有数字或运算后结果的二进制位数等于这个数列里面最大的二进制位数,因此把所有操作用在那个本来就最大的二进制位数上的话,二进制位数就会最大(因为x大于等于2)。
这样考虑完之后,如果有多个数字的二进制位数最大且相同呢?那么首先考虑第一次操作肯定会操作在这些数字的某一个上,而且操作完之后,这个数字就变成唯一一个二进制位数最大的了,那么接下来的操作肯定也是在这个数字上的,所以可以得出结论,k次操作都会用在同一个数字上!
至于哪一个,直接遍历就好了~
值得注意的是,遍历的时候,可以先预处理出o[i]=a[0]|a[1]|...|a[i-1]|a[i+1]|a[i+2]|...|a[n-1],这一步可以O(n)完成,然后计算出第i个位置的值再和o[i]取或。
o[i]的话,先预处理出左半边:a[0]..a[i-1],再处理右半边a[i+1]...a[n-1]。分两步正反各扫描一次即可完成。
Weakness and Poorness
题意:给定一个序列a1~an,求一个x使得a1-x,a2-x,...,an-x的 weakness 最小。
weakness 定义为序列的 最大的 子序列的poorness
poorness是这个序列的和的绝对值
思路:假定只有一个序列,我们求一个x使得这个序列的poorness最小。把x作为自变量,这个poorness的结果作为函数f(x)的话,可以得知f(x)是个凸函数(先增大,后变小,中间可能有一段不变)。
于是我们要求的问题变成 g(x)=min(f1(x),f2(x)...)。可以得知g(x)也是凸函数。g(x)这个函数的函数值可以通过dp求解。就是最大连续子段和的dp啦。
于是问题就是求g(x)这个凸函数的极值问题了,直接套三分求解即可。
PS:这题的精度卡的有点紧。。。
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define CIN(x) scanf("%d",&x)
#define FOR(i,n) for(i=0;i<(n);i++)
#define CLR(a,v) memset(a,(v),sizeof(a))
int a[];
int n;
double f(double x){
double ans1=,ans2=;
double ansans1=,ansans2=;
for(int i=;i<n;i++){
ans1=max(ans1+(a[i]-x),(a[i]-x));
ansans1=max(ans1,ansans1);
ans2=min(ans2+(a[i]-x),(a[i]-x));
ansans2=min(ans2,ansans2);
}
return max(ansans1,-ansans2);
}
double sanfen(double l,double r){
double mid,midmid,fmid,fmidmid;
mid=(l+r)/;
midmid=(mid+r)/;
fmid=f(mid);
fmidmid=f(midmid);
while(r-l>0.00000000001){
if(fmid>fmidmid){
l=mid;
mid=midmid;
fmid=fmidmid;
midmid=(mid+r)/;
fmidmid=f(midmid);
}else{
r=midmid;
midmid=mid;
fmidmid=fmid;
mid=(l+midmid)/;
fmid=f(mid);
}
}
return fmid;
}
int main(){
CIN(n);
int ma=-,i;
int mi=;
FOR(i,n){
CIN(a[i]);
ma=max(a[i],ma);
mi=min(a[i],mi);
}
printf("%.12lf\n",sanfen(mi,ma));
return ;
}
最后一题并不会做。。。
【解题报告】CF Round #320 (Div. 2)的更多相关文章
- CF Round #600 (Div 2) 解题报告(A~E)
CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...
- CF Round #551 (Div. 2) D
CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...
- CF Round #510 (Div. 2)
前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...
- 竞赛题解 - CF Round #524 Div.2
CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...
- cf Round#273 Div.2
题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...
- codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)
解题思路:就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int ...
- CF Round #509 (Div. 2)
前言:第一次打\(CF\),因为经验不足以及英语水平很烂,即便在机房大佬的带领下也是花了好久才读懂题目..\(A\)题直到\(11\)分钟才\(A\),题目一共才做了\(4\)题,太菜了.. A. H ...
- 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...
随机推荐
- nginx作为TCP反向代理
基于windows环境 基于nginx1.12.2版本 1. 解压nginx 2. 修改conf配置 # 打开conf/nginx,conf文件,写入以下配置 # upstream backend 里 ...
- UVA 1393 Highways(数学思想)
题意:给你n.m(n,m<=200),问你有多少条非水平.非垂直的直线有多少条经过至少两个点 题解:我们需要枚举的是只画一条线的矩形,对于大小a*b的矩形必须保证gcd(a,b)=1才能不重复 ...
- CSS布局框架 960GS 表单排版示例
- 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...
- nyoj最少乘法次数——快速幂思想
最少乘法次数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...
- RabbitMQ 如何保证消息不丢失?
RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性. 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知 ...
- 【Python】什么是闭包
文章转载自:点这里 在 Python 中很多教材都没有提及什么是闭包,但在定义一个 Decorator 时,就已经用到闭包了.如果不理解什么是闭包,则不可能清晰掌握Decorator 装饰器. 要形成 ...
- fidder设置断点,修改请求参数等
设置断点(来自:http://jingyan.baidu.com/article/17bd8e52216c8d85ab2bb8e9.html): 可以看到当前有一个抓取的很多的包的链接的地址的信息,那 ...
- CSS: Grid Layout Module
Grid Layout The CSS Grid Layout Module offers a grid-based layout system, with rows and columns, mak ...
- is7.0中发布mvc网站,一直无法正常执行路由的解决办法
在config中加一句话: <system.webServer> <validation validateIntegratedModeConfiguration="fals ...