题目传送

  由于于题目保证输入的ti是递增的,所以发现当我们统计完一艘船的答案后,这个答案多少会对下一艘船的答案有贡献。同时还发现如果对每个艘船都记录他的乘客在整个数据出现的所有国籍中相应出现的次数,在这道题的范围下,显然会爆空间,其实这个题如果按照一般的静态数组存储的话,光是记录每个船的乘客就会爆空间,但其实乘客总数是很少的,只是每艘船上的乘客人数不确定,要想建数组存下这些数据,必须对每个船都要考虑载最多乘客的情况,就导致了很大的空间浪费,由此我们可以用动态数组来完美避免这个问题。

  综上,可以只建一个记录所有国籍出现次数的数组,下一艘船的答案只要从上一艘船的答案里从最早的开始往后找,找到第一个包括在这艘船答案里的船。对于之前寻找过程找过但不符合条件的船,要让他更新以下当前的国籍数组。最后别忘了把这艘船自己包括进他自己的答案里就行。这样只要我们把数据输入后对每艘船额外维护一个他的答案里最早的船的编号就行了。

见AC代码:

 #include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; int *a[],n,k,ans,t[],nat[],len[]; char ch; inline int read()
{
ans=;
ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
return ans;
} int main()
{
n=read();
for(int i=;i<=n;i++)
{
t[i]=read();//每艘船的到来时间(注意以秒为单位
len[i]=read(); //乘客人数
a[i]=new int[len[i]+];//动态数组
for(int j=;j<=len[i];j++)
a[i][j]=read();
}
int lst=;//上一艘船答案里时间最早的船的编号
ans=;
for(int i=;i<=len[];i++)//对第一艘船这个边界情况特殊处理
{
if(nat[a[][i]]==) ans++;
nat[a[][i]]++;
}
printf("%d\n",ans);
int lim;
for(int k=;k<=n;k++)
{
for(int i=;i<=len[k];i++)
{
if(nat[a[k][i]]==) ans++;
nat[a[k][i]]++;
}
lim=t[k]-;//最低时间满足下限
while(t[lst]<=lim)//寻找过程
{
for(int i=;i<=len[lst];i++)
{
nat[a[lst][i]]--;
if(nat[a[lst][i]]==) ans--;
}
lst++;
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. android studio关联genymotion模拟器,未显示设备
  2. 移动端:active,:hover无法很好触发动画的解决方案
  3. 用户管理 之 Linux 用户(User)查询篇
  4. Servlet初识
  5. windows 下 apache设置
  6. 关于Android M RuntimePermission的问题
  7. Nine Great Books about Information Visualization
  8. OpenCV——IplImage
  9. python gzip 压缩文件
  10. 20175221曾祥杰 实验二《Java面向对象程序设计》
  11. 针对监控摄像机(海康、大华等)录像 .h264 文件的流媒体播放设计
  12. hdu 2097 sky数(进制转换)
  13. 解决webapi首次启动速度慢的问题 - z
  14. Jmeter --- 分布式测试
  15. Eclipse with ADT的安装和配置
  16. Linux实验楼学习之三
  17. redis集群错误解决:/usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call&#39;: ERR Slot 15495 is already busy (Redis::CommandError)
  18. 洛谷P1658 购物
  19. Java并发编程之读写锁
  20. ReentrantLock和ReentrantReadWriteLock对比

热门文章

  1. spark异常篇-Removing executor 5 with no recent heartbeats: 120504 ms exceeds timeout 120000 ms 可能的解决方案
  2. 第十章 ZYNQ-MIZ701 DDR3 PS读写操作方案
  3. 【Trie】Immediate Decodability
  4. 并不对劲的CSP-S2019
  5. 初学java4 循环的使用
  6. php--正则(手机号码)
  7. selenium在爬虫中的应用之动态数据爬取
  8. Lab2 Report
  9. BBPlus团队ALPHA冲刺博客(肖文恒)
  10. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)