洛谷 P2058 海港 解題報告

2022-04-30 06:15:06 字數 1617 閱讀 3653

小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。

小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況;對於第\(i\)艘到達的船,他記錄了這艘船到達的時間\(t_i\)(單位:秒),船上的乘客數星\(k_i\),以及每名乘客的國籍\(x(i,1), x(i,2),…,x(i,k)\);。

小\(k\)統計了\(n\)艘船的資訊,希望你幫忙計算出以每一艘船到達時間為止的24小時(24小時=86400秒)內所有乘船到達的乘客來自多少個不同的國家。

形式化地講,你需要計算\(n\)條資訊。對於輸出的第i條資訊,你需要統計滿足\(t_i-86400的船隻\(p\),在所有的\(x(p,j)\)中,總共有多少個不同的數。

輸入輸出格式

輸入格式:

第一行輸入乙個正整數\(n\),表示小\(k\)統計了\(n\)艘船的資訊。

接下來\(n\)行,每行描述一艘船的資訊:前兩個整數\(t_i\)和\(k_i\)分別表示這艘船到達海港的時間和船上的乘客數量,接下來\(k_i\)個整數\(x(i,j)\)表示船上乘客的國家。

保證輸入的\(t_i\)是遞增的,單位是秒;表示從小k第一次上班開始計時,這艘船在第\(t_i\)秒到達海港。

保證\(1<=n<=10^5\),\(\sum <=3∗10^5\),\(1<=x(i,j)<=10^5\),\(10^9<=t_<=ti<=10^9\)

輸出格式:

輸出\(n\)行,第\(i\)行輸出乙個整數表示第\(i\)艘船到達後的統計資訊。

昨天聽教練說,普及組的題目不怎麼考演算法,我的內心陡然一驚,那豈不是怎麼暴力怎麼來?

事實上並不是那麼簡單的,不考演算法,就十分的考思想了,昨天被2016t4魔法陣嚇到了於是打算先寫寫第三題。

今天讀完題目,恩?洛谷高效能?怕不是要卡常?那直接暴力來吧。拿個桶把當前的存起來,把船的資訊壓進佇列,交了以後

這個,看來事情並沒有這麼簡單,發現人最多有三十萬個,那直接存人和船的時間斷點好了。

尷尬,,,

加乙個上下界優化好了,每次遍歷桶的時候只遍歷到之前出現過得最大的人。

好傢伙,不能這樣搞。

又想了想,如果更新桶的時候某個種類由0變成了1就把答案加1,反之減1,不就剛好保證了300000*2嗎

原來正確複雜度是\(o(\sum k)\),所以有時候想練練思想,不妨多做做沒有什麼演算法的題目。

#include #include int max(int x,int y)

const int n=100010;

int ans[n],n,t,k,tour[n*3],time[n][2],l=1,r,p=1,now;

int main()

l++;

}for(int j=time[r][1]+1;j<=time[r][1]+k;j++)

time[++r][0]=t;

time[r][1]=time[r-1][1]+k;

printf("%d\n",now);

}return 0;

}

2018.6.18

洛谷 P2058 海港

題目描述 小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況 對於第i艘到達的船,他記錄了這艘船到達的時間ti 單位 秒 船上的乘 客數星ki,以及每名乘客的國籍 x i,1 x i...

洛谷 P2058 海港

題目傳送 由於於題目保證輸入的ti是遞增的,所以 發現當我們統計完一艘船的答案後,這個答案多少會對下一艘船的答案有貢獻。同時還發現如果對每個艘船都記錄他的乘客在整個資料出現的所有國籍中相應出現的次數,在這道題的範圍下,顯然會爆空間,其實這個題如果按照一般的靜態陣列儲存的話,光是記錄每個船的乘客就會爆...

P2058 海港 (洛谷)

這個題複製過來真的有點噁心,懶得手打,以後再搬題面吧。今天我雙更了,ac這個題我就完成某谷春令營第一課的作業了 假的 這個題是個雙指標。非常友善。一直往裡讀入就可以了,遇見不是一條船的乘客輸出這一條船前86400秒有多少不同國籍的人,然後從末尾檢視,時間差大於等於86400的人清除,切記以上兩步不要...