P2058 海港 (洛谷)
生活随笔
收集整理的這篇文章主要介紹了
P2058 海港 (洛谷)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這個(gè)題復(fù)制過來真的有點(diǎn)惡心,懶得手打,以后再搬題面吧。
今天我雙更了,AC這個(gè)題我就完成某谷春令營第一課的作業(yè)了(假的)
這個(gè)題是個(gè)雙指針。非常友善。一直往里讀入就可以了,遇見不是一條船的乘客輸出這一條船前86400秒有多少不同國籍的人,然后從末尾查看,時(shí)間差大于等于86400的人清除,切記以上兩步不要搞混。這個(gè)方法每個(gè)乘客只會入隊(duì)出隊(duì)一次,乘客最多只有300000人。是完全可行的。
接下來就是人見人愛的代碼了:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;
long long bj[100005],n,k,t,w,e,zs,s,shu,zshu;
struct hehe
{
long long gj,sj;//gj是國籍,sj是到來的時(shí)間
}ck[300005];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
cin>>k;
for(int j=0;j<k;j++)
{
cin>>e;
zs++;//第zs個(gè)乘客
ck[zs].gj=e;//國籍
ck[zs].sj=s;//到達(dá)時(shí)間
}
}
t=1;//頭指針
w=1;//尾指針
while(t<=zs)//所有乘客都算過一遍后結(jié)束
{
if(ck[t].sj!=ck[t-1].sj&&t!=1)//出現(xiàn)了不同船的乘客,說明上一條船前86400秒乘客全部計(jì)算過了,現(xiàn)在是在上艘船到達(dá)時(shí)間之后。
{
cout<<shu<<endl;//一定要先輸出,不然萬一減掉不該減的乘客就會WA掉。
while(ck[t].sj-ck[w].sj>=86400)//是>=不是>
{
bj[ck[w].gj]--;
if(bj[ck[w].gj]==0)//如果這個(gè)國籍的乘客已經(jīng)沒有了,這艘船前86400秒的總數(shù)--。
{
shu--;
}
w++;
}
}
if(bj[ck[t].gj]==0)//來了新乘客。
{
shu++;
}
bj[ck[t].gj]++;//這個(gè)乘客國籍的人數(shù)+1;
t++;//查看下一個(gè)。
}
cout<<shu<<endl;//最后一艘船的國籍?dāng)?shù)。
return 0;
}
之前這個(gè)題我還直接放棄過呢。現(xiàn)在看看也不難。
總結(jié)
以上是生活随笔為你收集整理的P2058 海港 (洛谷)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员父亲的遗产——编程十诫
- 下一篇: Java基础——Java NIO详解(二