一直找不到好的题去做...于是想到了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. 8782:乘积最大(划分dp)

    8782:乘积最大   同洛谷 P1018 乘积最大 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我 ...

  2. Eclipse出现ContextLoaderListener not find

    严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...

  3. java上传图片,把图片存到本地

    思路:js通过FileReader获取图片的Base64,Java解码用IO存到本地. HTML 代码 <input type="file" ng-model="f ...

  4. angular做的简单购物车

    虽然本人也是刚刚才开始学习angular.js,并不是非常会,但是这并不能阻止我对angular的喜爱.因为它太省代码了,比如说一个比较简单的购物车,就是只有商品名称,单价,数量,小计,总计和删除功能 ...

  5. matplotlib绘制圆饼图

    import matplotlib.pyplot as plt labels = ['Nokia','Samsung','Apple','Lumia'] values = [10,30,45,15] ...

  6. 【转】windows 下 goprotobuf 的安装与使用

    1. 安装 在网上看了很多教程,都提到要安装 protoc 与 protoc-gen-go,但通过尝试之后并不能正确安装 protoc,一下记录能够顺利安装 protoc 与 protoc-gen-g ...

  7. 找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动

    按照教材创建的方法:“控制面板-管理工具-数据源(ODBC)”,打开“ODBC数据源管理器”窗口,然后“添加”,打开“创建新数据源”的窗口,最后选择Microsoft Access Driver(*. ...

  8. android 反汇编一些资料

    Android软件安全与逆向分析   http://book.2cto.com/201212/12432.html Smali--Dalvik虚拟机指令语言 http://blog.csdn.net/ ...

  9. Python计算地图上两点经纬度间的距离

    处理地图数据时,经常需要用到两个地理位置间的距离.比如A点经纬度(110.0123, 23.32435),B点经纬度(129.1344,25.5465),求AB两点之间的距离.我们可以用haversi ...

  10. centos7 Docker Compose 的安装

    [root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose ...