大模拟题的注意事项合集
P2058 [NOIP2016 普及组] 海港
坑点:
- 一开始的思路是直接建一个队列,如果队里有这个国家的人那么就不进队,根据时间不断删除队首,查询队列的 size。
很容易看出这个思路不可行。
因为这个时刻队列中有这个国籍的人,下一次就不一定是这一个了 - 那我们记录此时队列中有几个此国籍的人,根据时间删除时就是这个编号-1,如果减成0,size-1。如果队列里一开始没有,就让 size+1。
一定要先减后加!!!降低时间复杂度
代码:
#include<bits/stdc++.h> using namespace std; queue<pair<int,int> >qt;//记录people的队列 //pair的first存储这个人进入海港的时间,second存储这个人的国籍 int cnt[5000100]; int sizeq=0; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { int t,k; cin>>t>>k; while(!qt.empty()&&t-qt.front().first>=86400) { int se=qt.front().second; cnt[se]--; if(cnt[se]==0) sizeq--; qt.pop(); } for(int j=1;j<=k;j++) { int cn; cin>>cn; cnt[cn]++; if(cnt[cn]==1) sizeq++; qt.push({t,cn}); } cout<<sizeq<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!