【解题报告】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\)的有奖,那么 ...
随机推荐
- Mysql CASE WHEN 用法
select sum(1) as col_0_0_, sum(case vciinfo.useable when -1 then 1 else 0 end) as col_1_0_, sum(case ...
- Css(样式)
CSS三种样式 1.行内样式 ①将css样式与html,完全糅杂在一起,不符合w3c关于“内容与表现分离”的基本规范,不利于后期维护. ②优先级最高. 2.内部样式表 ...
- Python性能(转)
第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门 ...
- 这样获取celery的结果 有啥隐患没有啊?
- jQuery实际案例④——360导航图片效果
如图:①首先使用弹性盒子布局display:flex; flex-wrap:wrap; ②鼠标移上去出现“百度一下,你就知道了”,这句话之前带上各个网站的logo:③logo使用的是sprite,需要 ...
- Session存储
session其实分为服务器端Session和客户端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个sessionid作为标识.用户每次提交页面,浏览器都会把这个ses ...
- 实现Promise的first等各种变体
本篇文章主要是想通过ES6中Promise提供的几个方法,来实现诸如first.last.none.any等各种变体方法! 在标准的ES6规范中,提供了Promise.all和Promise.race ...
- Zookeeper在 Linux 系统的安装
安装步骤:第一步:安装 jdk第二步:把 zookeeper 的压缩包上传到 linux 系统.Alt+P 进入 SFTP ,输入 put d:\zookeeper-3.4.6.tar.gz 上传第三 ...
- vue iview组件表格 render函数的使用
如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到 attrs 来加入而不是props { title: '操作', key: 'action', align: 'c ...
- Tracing on Linux
The Linux tracing APIs are a relatively new addition to the kernel and one of the most powerful new ...