一直找不到好的题去做...于是想到了srm...回来补题...QAQ

从srm01补起

A

题意:n个数,排成一列,刚开始都是1,如果左右相等就可以合并,问最后的数列长什么样。

思路:比赛的时候直接敲了个 一直log2 直到为0,觉得应该是100的...于是炸到了90.

比完赛懒得调就没去理,回来补的时候发现是p的trunc有点问题哇...以后都打成trunc(x+0.000001) 出错率会低一点QAQ

 var n,s:longint;
begin
read(n);
repeat
s:=trunc(ln(n)/ln()+0.00001);
write(s+,' ');
n:=n-( << s);
until n=;
end.

A

B

题意:有m升油,n个数,可以用一升油数某一个数+1,再给一个mx 然后给 v1 v2 求 (v1*达到mx的数的个数+v2*整个数列的最小值)最大化。

思路:比赛的时候想的是拿部分分,然后弄不出来,然后觉得是二分,敲不出来,就拿到了10分。

补题的时候有一个新的思路,枚举达到mx的数的个数,然后再二分最小值。

然后check就贪心的弄,设达到mx的数的个数为num,二分到的最小值为x

然后贪心算需要的油就可以check了,但是这样要多一个n的复杂度。

显然o(n^2 logn)的复杂度是要tle的。

想想优化,由于贪心,所以已经先把原数列排序了,辣么就满足的单调性。

满足单调性就可以二分

所以求排序后的数列的前缀和,然后在二分里在套一个二分就好了

复杂度 o(n logn ^2)

 var a,b,c,sum:array[..]of int64;
n,mx,v1,v2:int64;
have,z:int64;
l,r,m:longint;
ans,num,ansmin,ansnum:int64;
i,j:longint;
procedure qs(l,r:longint);
var i,j,t,m:longint;
begin
i:=l;
j:=r;
m:=a[(l+r)>>];
repeat
while a[i]>m do inc(i);
while a[j]<m do dec(j);
if i<=j then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if l<j then qs(l,j);
if i<r then qs(i,r);
end;
function find(x:longint):longint;
var l,r,m:longint;
begin
l:=num+;
r:=n;
while l<=r do
begin
m:=(l+r) >>;
if a[m]>x then l:=m+ else r:=m-;
end;
exit(l);
end;
function check(x:longint):boolean;
var i:longint;
need:int64;
begin
need:=z;
i:=find(x);
inc(need,x*(n-i+)-(sum[n]-sum[i-]));
if need>have then exit(false) else exit(true);
end;
begin
read(n,mx,v1,v2,have);
for i:= to n do
begin
read(a[i]);
b[i]:=a[i];
c[i]:=i;
end;
qs(,n);
for i:= to n do
sum[i]:=sum[i-]+a[i];
for i:= to n do
begin
num:=i;
z:=mx*num-sum[num];
if z>=have then continue;
l:=;
r:=mx;
while l<r do
begin
m:=(l+r+)>>;
if check(m) then l:=m else r:=m-;
end;
if ans<num*v1+l*v2 then
begin
ans:=num*v1+l*v2;
ansnum:=num;
ansmin:=l;
end;
end;
writeln(ans);
for i:= to ansnum do
b[c[i]]:=mx;
for i:= to n do
if b[i]<ansmin then write(ansmin,' ')else write(b[i],' ');
writeln;
end.

B

C

题意:一个数列,支持两个操作,1.L~R 加上x   2.查询当前序列,如果从任意一个位置开始,两边严格递减的最大长度。

思路:比赛的时候完全没思路,暴力都不会打。

补题觉得可以线段树弄,每次维护区间最大长度,左边的值,右边的值,然后乱维护....QAQ

结果不会打。所以pass掉吧...

Contest-hunter 暑假送温暖 SRM01的更多相关文章

  1. Contest-hunter 暑假送温暖 SRM08

    01-07都没写...然后突然来写貌似有点突兀啊...不管了,难得前排记录一下... 吐槽一下赛制...不得不说很强... cf 套oi...很创新...不过还是兹磁ACM或者CF A-1 数据才2& ...

  2. bzoj4693: 雪中送温暖

    Description 每年的1月10日是温暖节,在这一天,化身出题人的C_SUNSHINE将会给OIer们送温暖.OIer们只要在门口放上一个 仙人掌,就能在早上的某个时刻听到门外传来一声:“开门, ...

  3. Contest Hunter 3101

    题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...

  4. 【Contest Hunter【弱省胡策】Round #0-Flower Dance】组合数学+DP

    题目链接: http://ch.ezoj.tk/contest/%E3%80%90%E5%BC%B1%E7%9C%81%E8%83%A1%E7%AD%96%E3%80%91Round%20%230/F ...

  5. [Contest Hunter#17-C] 舞动的夜晚

    [题目链接] http://contest-hunter.org:83/contest/CH%20Round%20%2317/%E8%88%9E%E5%8A%A8%E7%9A%84%E5%A4%9C% ...

  6. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

  7. 某次送温暖考试的 c题

    题目大意: 给定n个点的无根树,树上每个点都有一个非负的点权. 树上的路径的价值定义为树上路径的点权和-树上路径的点权最大值; 现在给定一个参数P询问有多少条路径的价值是P的倍数(注意单点也算路径,路 ...

  8. 【Contest Hunter 5302】金字塔

    [原题链接]传送门 [题解思路] 1.考虑如何将序列与树相对应,想到类似dfs序和欧拉序,同一个子树对应序列连续 2.暴力分子树过于复杂,考虑简化(划重点: 若当前区间为[l,r],考虑第一颗子树所在 ...

  9. Contest Hunter 1401 兔子与兔子

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

随机推荐

  1. 1.2_php验证码

    使用php生成动态的验证码图片 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  2. servlet ; basepath ; sendredirected ;

    Eclipse 新建 jsp页面里自动生成以下代码: <%String path = request.getContextPath();String basePath = request.get ...

  3. windows程序查看可以行文件依赖库

    通常在做windows下开发程序,发布的时候需要同时打包一些依赖库:我们可以通过工具直接查看需要发布的程序依赖的程序,这样可以方便快捷的打包程序 这里我们推荐使用:dependencywalker 下 ...

  4. 微信公众号 待发货-物流中-已收货 foreach break continue

    w <?php $warr = array(1,2,3); $w_break = 0; foreach($warr AS $w){ if($w==2)break; $w_break += $w; ...

  5. 2015-03-22——js常用的String方法

    String string.charAt(pos);  //返回字符串中pos位置处的字符.如果pos小于0或大于等于string.length返回空字符串.模拟实现:Function.prototy ...

  6. 每隔10秒钟打印一个“Helloworld”

    /** * 每隔10秒钟打印一个“Helloworld” */ public class Test03 { public static void main(String[] args) throws ...

  7. PHP去除所有的空格

    1.去除两边的空格 trim($arr) 2.正则匹配去除所有的空格 preg_replace('# #','',$goodid)

  8. 我的Android进阶之旅------>解决Android Studio全局搜索搜不到结果的问题

    1.问题描述 今天使用Android Studio时,想通过使用快捷键Ctrl+Shift+F来进行全局搜索指定字符串,如下图所示:想搜索字符串"码农偷懒了", 打开string. ...

  9. Android学习九---OpenCV4android org.opencv.feature2d

    不管是在识别,配准等应用中,提取图像的特征都是很关键的一环,提取特征是先找出图像的关键点(如角点,边缘点等),然后用描述子来描述这些点,最后整幅图像就可以表示成一个特征向量,特征向量就可以利用在后续识 ...

  10. tensorflow 的 tutorial 的卷积神经网络的例子 convolutional.py

    具体的网址在这里: https://github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/models 一个卷积神经网络用于股票分析的例子:  ...