1304 火车站NOIP1998提高组 1307 拦截导弹NOIP1999提高组

更新时间:2024-04-01 09:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

火车站【NOIP1998提高组】

Time Limit:10000MS Memory Limit:65536K

Total Submit:7 Accepted:4

Description

火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问x站开出时车上的人数是多少? 输入:a,n,m和x

输出:从x站开出时车上的人数。

注:所有数据,包括结果,均小于2^31。

Input Output

Sample Input

5 7 32 4

Sample Output

13

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

var k:double;

a,n,m,x,i,j:longint;

fa,fb,suma,sumb:array[1..20]of longint; begin

readln(a,n,m,x);

fa[1]:=1; fa[2]:=0; fb[1]:=0; fb[2]:=1; for i:=3 to n do begin

fa[i]:=fa[i-1]+fa[i-2]; fb[i]:=fb[i-1]+fb[i-2]; end;

suma[1]:=a; sumb[1]:=0; for i:=2 to n do begin

suma[i]:=suma[i-1]+fa[i]*a; sumb[i]:=sumb[i-1]+fb[i]; end;

k:=(m-suma[n-3]-a)/sumb[n-3]; if k-trunc(k)<1e-6 then

writeln(suma[x-2]+sumb[x-2]*trunc(k)+a) else writeln('No answer.'); end.

拦截导弹【NOIP1999提高组】

Time Limit:10000MS Memory Limit:65536K

Total Submit:46 Accepted:17

Description

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,个数少于1000个),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

Input

389 207 155 300 299 170 158 65

Output

6 (最多能拦截的导弹数)

2 (要拦截所有导弹最少要配备的系统数)

Sample Input

389 207 155 300 299 170 158 65

{注意读入数据的代码,没有指明个数,但数据个数保证少于1000个}

Sample Output

6 2

Source

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

var

i,j,n,max,l,min,k:longint; a,b:array[1..1000] of longint; c:array[1..1000] of longint; begin

while not(eoln) do begin inc(n); read(a[n]); end; max:=0;

for i:=1 to n do begin b[i]:=1;

for j:=1 to i-1 do if (a[j]>a[i]) and (b[j]+1>b[i]) then b[i]:=b[j]+1;

if max

writeln(max); l:=0;

for i:=1 to n do begin min:=maxlongint; k:=0;

for j:=1 to l do if (min>c[j]) and (c[j]>=a[i]) then begin min:=c[j]; k:=j; end;

if k<>0 then c[k]:=a[i]; if k=0 then begin

inc(l); c[l]:=a[i]; end; end;

writeln(l); end.

本文来源:https://www.bwwdw.com/article/a1jr.html

Top