NOIP2016普及组第三题——海港

本文介绍了一个关于统计海港船只乘客国籍数量的算法问题。通过记录每艘船到达时间和乘客国籍,计算每24小时内到达的乘客来自多少个不同国家。提供了一个基本实现方案,并讨论了其效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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小时以内的所有国人。
相当暴力,尽管加入了一定的优化,但还是没有克服超时问题。
正在寻找更优解…将会在回复区给出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值