标签:数据 ott else 不能 输入格式 lse 阶段 复制 发展
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是 \le 50000≤50000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式:
11 行,若干个整数(个数 \le 100000≤100000 )
输出格式:
22 行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
1 var 2 n,ans,i,l,r,mid:longint; 3 a,f:array[0..100005]of longint; 4 5 begin 6 n:=1; 7 read(a[n]); 8 while not eoln do 9 begin 10 inc(n); 11 read(a[n]); 12 end; 13 ans:=0; 14 f[0]:=maxlongint; 15 for i:=1 to n do 16 begin 17 if f[ans]>=a[i] then 18 begin 19 f[ans+1]:=a[i]; 20 inc(ans); 21 end 22 else 23 begin 24 l:=0;r:=ans; 25 while l<r do 26 begin 27 mid:=(l+r)div 2; 28 if f[mid]<a[i] then r:=mid 29 else l:=mid+1; 30 end; 31 if l<>0 then f[l]:=a[i]; 32 end; 33 end; 34 writeln(ans); 35 ans:=0; 36 fillchar(f,sizeof(f),0); 37 for i:=1 to n do 38 begin 39 if f[ans]<a[i] then// ans记录的是几台系统,如果辆导弹高度相等, 40 begin // 就不需要加一台系统,所以不加等于号 41 f[ans+1]:=a[i]; 42 inc(ans); 43 end 44 else 45 begin 46 l:=0;r:=ans; 47 48 while l<r do 49 begin 50 mid:=(l+r)div 2; 51 if f[mid]>=a[i] then r:=mid 52 else l:=mid+1; 53 end; 54 if l<>0 then f[l]:=a[i]; 55 end; 56 end; 57 writeln(ans); 58 end.
标签:数据 ott else 不能 输入格式 lse 阶段 复制 发展
原文地址:https://www.cnblogs.com/brilliant107/p/9404988.html