procedure2012
It's not worth it to know you're not worth it!

[题目来源]:vijosOrz教主第一次模拟赛

[关键字]:图论 二分

[题目大意]:给出每个点最早到达时间和最晚到达时间及该路段路程,求出最大速度最小

//=====================================================================================================

[分析]:二分答案+验证。但是由于浮点类型,所以要注意:1、精度问题;2、二分的停止条件。精度问题可以用extended解决,停止条件可以设定为l与r的差值,在要求精度以下。

[代码]:

View Code
 1 var
2 n: longint;
3 x, y, s: array[0..100000] of longint;
4
5 procedure init;
6 var
7 i: longint;
8 begin
9 readln(n);
10 for i := 1 to n do readln(x[i],y[i],s[i]);
11 end;
12
13 function cleck(v: extended):boolean;
14 var
15 i: longint;
16 t: extended;
17 begin
18 t := 0;
19 for i := 1 to n do
20 begin
21 t := t+s[i]/v;
22 if t < x[i] then t := x[i];
23 if t > y[i] then exit(false);
24 end;
25 exit(true);
26 end;
27
28 procedure work;
29 var
30 l, r, mid: extended;
31 begin
32 l := 1;
33 r := 1e8;
34 repeat
35 mid := (l+r)/2;
36 if cleck(mid) then r := mid else l := mid;
37 until r-l < 1e-3;
38 writeln(mid:0:2);
39 end;
40
41 begin
42 assign(input,'d:\1.in');reset(input);
43 assign(output,'d:\1.out');rewrite(output);
44 init;
45 work;
46 close(input);
47 close(output);
48 end.



posted on 2011-11-10 23:53  procedure2012  阅读(209)  评论(0编辑  收藏  举报