【解题报告】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\)的有奖,那么 ...
随机推荐
- LeetCode——Largest Rectangle in Histogram
Question Given n non-negative integers representing the histogram's bar height where the width of ea ...
- 【链接】SpringBoot启动错误
[错误解决]SpringBoot启动错误 https://blog.csdn.net/Small_Mouse0/article/details/78551900
- 解题报告:poj1083 Moving tables
2017-09-02 19:49:59 writer:pprp 题意说明: 比较简单的题,一开始被吓到了,后来才发现,其实可以用很简单的方法就可以解决: 就是在这样的房间中如果在i 和 j 中之后的1 ...
- vjudge-A-这是测试你会不会语言的模拟
2017-07-14 18:13:35 writer:pprp 介绍:最基本用代码展示思想的一道题 题意如下; 他细细观察了自己的工作环境,发现整个工作室是一个N行M列的矩形布局,或者是因为屌丝的本性 ...
- ADO.NET 使用DELETE语句批量删除操作,提示超时,删除失败,几种优化解决思路
起因是如此简单的一句sql 提示:Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应. 提供几种解决思路: 1.检查WHERE条件中字段是否已建索引 2.检查是否被其他表引用,引用表外 ...
- RabbitMQ入门(2)——工作队列
前面介绍了队列接收和发送消息,这篇将学习如何创建一个工作队列来处理在多个消费者之间分配耗时的任务.工作队列(work queue),又称任务队列(task queue). 工作队列的目的是为了避免立刻 ...
- nginx 开启rewrite thinkcmf
server{ ... 省略 location / { index index.php index.html index.htm; #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则 if ...
- cygwin下安装软件
cygwin下安装软件cygwin工具安装新的软件和常见的命令windows8.1下安装Cygwin并通过apt-cyg安装软件包Cygwin利用apt-cyg安装gcc.g++.make和gdb 首 ...
- mui app在线更新
一参考资料 二代码 HTML代码 CSS代码 JS代码 接口代码 一.参考资料 http://ask.dcloud.net.cn/article/182 二.代码 1. HTML代码 <div ...
- es6之Iterator
1.任何数据结构只要部署了Iterator接口(本质是一个指针对象),也就是部署了Symbol.iterator属性,便可以完成遍历操作:数组原生就具备Iterator接口,就可以用for...of遍 ...