题目大意:现有n艘船,已知每艘船到达时间以及乘客人数和每个乘客的国际,请统计各艘船到达时24小时内乘客的不同国籍数量?
题目描述
小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)中,总共有多少个不同的数。
输入
第一行输入一个正整数n,表示小K统计了 n艘船的信息。
接下来n行,每行描述一艘船的信息:前两个整数ti和ki分别表示这艘船到达海港的时间和船上的乘客数量,接下来ki个整数x(i,j)表示船上乘客的国籍。
保证输入的ti是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第 ti 秒到达海港。
输出
输出n行,第i行输出一个整数表示第i艘船到达后的统计信息。
样例输入
输入样例#1:
3
1 4 4 1 2 2
2 2 2 3
10 1 3
输入样例#2:
4
1 4 1 2 2 3
3 2 2 3
86401 2 3 4
86402 1 5
样例输出
输出样例#1:
3
4
4
输出样例#2:
3
3
3
4
提示
到达的船是第一艘船、第二艘船和第 三艘船,共有4+ 2+1=7个乘客,分别是来自国家4,1,2,2,2,3,3,共来自4个不同 的国家。
【样例解释2】
第一艘船在第1秒到达海港,最近24小时到达的船是第一艘船,共有4个乘客,分别是来自国家1,2,2,3,共来自3个不同的国家。
第二艘船在第3秒到达海港,最近24小时到达的船是第一艘船和第二艘船,共有4+2=6个乘客,分别是来自国家1,2,2,3,2,3,共来自3个不同的国家。
第三艘船在第86401秒到达海港,最近24小时到达的船是第二艘船和第三艘船,共有2+2=4个乘客,分别是来自国家2,3,3,4,共来自3个不同的国家。
第四艘船在第86402秒到达海港,最近24小时到达的船是第二艘船、第三艘船和第四艘船,共有2+2+1=5个乘客,分别是来自国家2,3,3,4,5,共来自4个不同的国家。
NOIP2016普及组第三题
解题思路
把n艘船的乘客依次读入结构体数组d中,并记录他们的到达时间和国籍。为了避免重复扫描乘客和方便统计,我们用一个f数组记录各国籍乘客数。当一艘船来的时候,一个一个人统计国籍,如果该人的国籍原来人数为0,那么当前国籍的数量比之前多1;在输出统计好的国籍数量之前,需要去掉那些24小时之前的乘客(“下船”):一个一个看,如果乘客到达时间加上24小时不大于当前时间,那么他就是要排除在外的,减少该国国籍人数,如果减为0,国籍数量减1。
时间复杂度:O(n+∑ki),因为每条船只扫描一次,每个人最多扫描2次。
程序实现
骗分代码
首先读入所有乘客,记录每个乘客的达到时间和国籍到结构体d中,m是乘客总数。一个一个时间点输出,对于每个时间点,从m个乘客里面找在24小时内的且不比当前时间点晚的乘客,如果满足条件,且他是新国籍,ans加1,统计完后输出ans。时间复杂度O(n*m),n*m在1e7以内可以轻松过,拿70分绝对没问题!
时间戳版本:不用每次memset,原来f[x]记录x国是否统计(出现)过,现在f[x]记录x国是否在第i次统计过(如果f[x]等于i则表示在第i次统计过)。
【数据范围】
。
表示所有的ki的和。