題目傳送
由於於題目保證輸入的ti是遞增的,所以
發現當我們統計完一艘船的答案後,這個答案多少會對下一艘船的答案有貢獻。同時還發現如果對每個艘船都記錄他的乘客在整個資料出現的所有國籍中相應出現的次數,在這道題的範圍下,顯然會爆空間,其實這個題如果按照一般的靜態陣列儲存的話,光是記錄每個船的乘客就會爆空間,但其實乘客總數是很少的,只是每艘船上的乘客人數不確定,要想建陣列存下這些資料,必須對每個船都要考慮載最多乘客的情況,就導致了很大的空間浪費,由此我們可以用動態陣列來完美避免這個問題。
綜上,可以只建乙個記錄所有國籍出現次數的陣列,下一艘船的答案只要從上一艘船的答案裡從最早的開始往後找,找到第乙個包括在這艘船答案裡的船。對於之前尋找過程找過但不符合條件的船,要讓他更新以下當前的國籍陣列。最後別忘了把這艘船自己包括進他自己的答案裡就行。這樣只要我們把資料輸入後對每艘船額外維護乙個他的答案裡最早的船的編號就行了。
見ac**:
1 #include2 #include3 #include45using
namespace
std;67
int *a[100001],n,k,ans,t[100001],nat[100001],len[100001];8
9char
ch;10
11 inline int
read()
1219
20int
main()
2131
int lst=1;//
上一艘船答案裡時間最早的船的編號
32 ans=0;33
for(int i=1;i<=len[1];i++)//
對第一艘船這個邊界情況特殊處理
3438 printf("
%d\n
",ans);
39int
lim;
40for(int k=2;k<=n;k++)
4147 lim=t[k]-86400;//
最低時間滿足下限
48while(t[lst]<=lim)//
尋找過程
49
55 lst++;
56}
57 printf("
%d\n
",ans);58}
59return0;
60 }
洛谷 P2058 海港
題目描述 小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況 對於第i艘到達的船,他記錄了這艘船到達的時間ti 單位 秒 船上的乘 客數星ki,以及每名乘客的國籍 x i,1 x i...
P2058 海港 (洛谷)
這個題複製過來真的有點噁心,懶得手打,以後再搬題面吧。今天我雙更了,ac這個題我就完成某谷春令營第一課的作業了 假的 這個題是個雙指標。非常友善。一直往裡讀入就可以了,遇見不是一條船的乘客輸出這一條船前86400秒有多少不同國籍的人,然後從末尾檢視,時間差大於等於86400的人清除,切記以上兩步不要...
洛谷 P2058 海港 解題報告
小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況 對於第 i 艘到達的船,他記錄了這艘船到達的時間 t i 單位 秒 船上的乘客數星 k i 以及每名乘客的國籍 x i,1 x i...