首页 > 代码库 > JZOJ 1724. eko(eko.pas/cpp)
JZOJ 1724. eko(eko.pas/cpp)
1724. 【10.6NOIP普及模拟】eko(eko.pas/cpp)
(File IO): input:eko.in output:eko.out
时间限制: 1000 ms 空间限制: 256000 KB 具体限制
Goto ProblemSet
PS: 题目应该是没有不可能的情况,可以忽略
FIRST
. 假设有一个高度b就是我们要的答案,那么可以得出我们这么一个公式:
总高度和-保留的树木>=最少要得到的木材 就是
解不等式得到: 【表示学LaTeX的语法好艰难。。。】
那我们是不是只要根据这个不等式解出b就可以了?
?
Second
Of course not !
因为会出现这种情况:
Third
最终解法:
1. 把a数组qsort一遍,并按照不等式求出b
2.从最小a[1]的开始比较,如果b高于a[i] 那么把他们的差的绝对值分给其他的树
接着比较,直到a[i]<=b就停止循环,此时得到的b是一个实数,对其取整,输出
PS: pascal 的浮点数比较坑, 调试了半个小时,才发现要减去一个0.9999999....qwq
1 { 2 by @bobble ! 3 2017-1-19 4 } 5 program eko; 6 const 7 inf=‘eko.in‘; 8 outf=‘eko.out‘; 9 var 10 m:int64; 11 sum,ans:qword; 12 aa,s2:Extended; 13 i,n:longint; 14 a:array[0..1000000] of int64; 15 16 procedure qsort(l,r:longint); 17 var 18 i,j,x,y:int64; 19 begin 20 i:=l; j:=r; x:=a[(l+r) div 2]; 21 repeat 22 while a[i]<x do inc(i); 23 while x<a[j] do dec(j); 24 if not(i>j) then 25 begin 26 y:=a[i]; a[i]:=a[j]; a[j]:=y; 27 inc(i); j:=j-1; 28 end; 29 until i>j; 30 if l<j then qsort(l,j); 31 if i<r then qsort(i,r); 32 end; 33 34 begin 35 assign(input,inf); 36 assign(output,outf); 37 reset(input); rewrite(output); 38 39 readln(n,m); 40 41 for i:= 1 to n do 42 begin 43 read(a[i]); 44 sum:=sum+a[i]; 45 end; 46 qsort(1,n); 47 48 aa:=(sum-m)/n; 49 50 i:=1; 51 while aa>a[i] do 52 begin 53 s2:=(aa-a[i]); 54 aa:=aa+s2/(n-i); 55 inc(i); 56 if i>n then break; 57 end; 58 if trunc(aa-0.9999999)+1>a[i] then ans:=trunc(aa) 59 else ans:=trunc(aa-0.9999999)+1; 60 writeln(ans); 61 62 close(input); 63 close(output); 64 end.
JZOJ 1724. eko(eko.pas/cpp)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。