NOIP2016普及组第三题——海港

时间:2021-04-07 20:46:49

SSL 2593
洛谷 P2058 海港
题目描述
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti (单位:秒),船上的乘 客数星ki,以及每名乘客的国籍 x(i,1), x(i,2),…,x(i,k);。
小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足 ti - 86400 < tp <= ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。

var
n,s,time,k,max,x,i,j:longint;
a,t:array[1..100000]of longint;
begin
assign(input,'port.in');
reset(input);
assign(output,'port.out');
rewrite(output);
readln(n);
for i:=1 to n do
begin
read(time,k);
for j:=1 to k do
begin
read(s);
if a[s]=0 then a[s]:=1;
if a[s]=1 then begin t[s]:=time; if x<s then x:=s; end;
end;
max:=0;
for j:=1 to x do
if (t[j]>time-86400)and(a[j]=1) then
inc(max);
writeln(max);
end;
close(input);
close(output);
end.

这是我的程序,虽然后面几条数据超时了,但是起码是对的。
方法很简单:
1、将所有的国人都归到一个数组里,将最晚来港的时间记录,以便计算
2、第二次双重循环,寻找24小时以内的所有国人。
相当暴力,尽管加入了一定的优化,但还是没有克服超时问题。
正在寻找更优解…将会在回复区给出