1. 程式人生 > >【NOIP2016】海港

【NOIP2016】海港

題目描述

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

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

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

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


樣例1 輸入 3 1 4 4 1 2 2 2 2 2 3 10 1 3 樣例1 輸出: 3 4 4


樣例2 輸入: 4 1 4 1 2 2 3 3 2 2 3 86401 2 3 4 86402 1 5
樣例2 輸出: 3 3 3 4

【樣例一說明】

第一艘船在第1秒到達海港,最近24小時到達的船是第一艘船,共有4個乘客,分別是來自國家4,1,2,2,共來自3個不同的國家;

第二艘船在第2秒到達海港,最近24小時到達的船是第一艘船和第二艘船,共有 4+2=6個乘客,分別是來自國家4,1,2,2,2,3,共來自4個不同的國家;

第三艘船在第10秒到達海港,最近24小時到達的船是第一艘船、第二艘船和第三艘船,共有4+2+1=7個乘客,分別是來自國家4,1,2,2,2,3,3,共來自4個不同的國家。

【樣例二說明】

第一艘船在第1秒到達海港,最近24小時到達的船是第一艘船,共有4個乘客,分別是來自國家1,2,2,3,共來自3個不同的國家。

第二艘船在第3秒到達海港,最近24小時到達的船是第一艘船和第二艘船,共有4+2=6個乘客,分別是來自國家1,2,2,3,2,3,共來自3個不同的國家。

第三艘船在第86401秒到達海港,最近24小時到達的船是第二艘船和第三艘船,共有2+2=4個乘客,分別是來自國家2,3,3,4,共來自3個不同的國家。

第四艘船在第86402秒到達海港,最近24小時到達的船是第二艘船、第三艘船和第四艘船,共有2+2+1=5個乘客,分別是來自國家2,3,3,4,5,共來自4個不同的國家。


---------------------------------------------------------------------------

這道題,估計很多童鞋就直接用一個結構體陣列,將每一條進港的船的所有資訊記錄下來。
然而,這是要爆記憶體的!
所以,我們得用其它的資料結構,節省空間。
我們在看到題目的資料規模:∑k i  ≤ 3 * 10 ^ 5。
於是,整個資料結構就出來了:將每艘船上的人的到達時間和國籍記錄下來,放進一個佇列中。這樣,每當需要重新統計時,就可
以很方便地計數了。
由於總人數不會超過3 * 10 ^ 5,國籍不會超過10 ^ 5種,所以記憶體那裡一切平安!
-----------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include<cstdio> #include<queue> using  namespace  std; int  nation[1000005]; struct  node{      int  s, t; }; queue<node>ship; node h; int  ans; int  main() {      int  n, i, t, m, j, p;      scanf ( "%d" , &n);      for (i = 1; i <= n; i++)      {          scanf ( "%d%d" , &t, &m);          while (!ship.empty())          {              h = ship.front();              if (h.t + 86400 <= t)              {                  nation[h.s]--;                  if (!nation[h.s])                      ans--;                  ship.pop();                  continue ;              }              break ;          }          for (j = 1; j <= m; j++)          {              scanf ( "%d" , &p);              h.s = p, h.t = t;              ship.push(h);

相關推薦

NOIP2016海港

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

NOIP2016憤怒的小鳥

數據 需要 消失 int 指令 我們 所在 clas 小鳥 題目描述 Kiana最近沈迷於一款神奇的遊戲無法自拔。 簡單來說,這款遊戲是在一個平面上進行的。 有一架彈弓位於(0,0)處,每次Kiana可以用它向第一象限發射一只紅色的小鳥,小鳥們的飛行軌跡均為形如的曲線,其中

NOIP2016天天愛跑步

truct ios 多少 個人 img 自己 ret 一行 速度 題目描述 小c同學認為跑步非常有趣,於是決定制作一款叫做《天天愛跑步》的遊戲。?天天愛跑步?是一個養成類遊戲,需要玩家每天按時上線,完成打卡任務。 這個遊戲的地圖可以看作一一棵包含 個結點和 條邊的樹, 每條

NOIP2016蚯蚓(單調隊列)

www. 技術 preview view es2017 span res 最長 blog 題意: 思路: 我們發現,對於任意兩次切割i和j,i<j,在進行完第j次切割後,第i次切割的u/v部分一定大於等於第j次切割的u/v部分,第i次的1-u/v部分也一定大於等

NOIP2016換教室

layer 浮點數 min 答案 pro () 大於 row tin Description 對於剛上大學的牛牛來說,他面臨的第一個問題是如何根據實際情況申請合適的課程。 在可以選擇的課程中,有2n節課程安排在n個時間段上。在第i(1<i<n)個時間段上,兩節內容相同

NOIP2016提高組

usm 前綴和 sed scanf typedef pac 取余 -s rank Day1 T1玩具謎題 題目鏈接 簡單模擬題,註意一下取余啊方向啊什麽的就行了。 1 #include<cstdio> 2 #include<cstri

noip2016洛谷P2827蚯蚓

初始 開始 code space cout iostream lag == std 這個題只知道可以用優先隊列去做,但是不知道正解想法,看到題解後恍然大悟,詳情請看代碼中間 #include<algorithm> #include<iostream

NOIP2016魔法陣

ace DC abc algorithm 計算 前綴 -m d+ 左面 【Problem description】 六十年一次的魔法戰爭就要開始了,大魔法師準備從附近的魔法場中汲取魔法能量。  大魔法師有m個魔法物品,編號分別為1,2,...,m。每個物品具有一個魔法值,

noip2016玩具謎題

max 它的 ios 輸入 pre 字符串 左右 分享 無法 題目描述 小南有一套可愛的玩具小人,它們各有不同的職業。 有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了一個圈,它們有的面朝圈內,有的面朝圈外。如下圖: 這時singer告訴小南一個謎題:“

NOIP2016蚯蚓

題面連結 演算法:           我們將蚯蚓長度分成三個陣列儲存,原先就有、切掉後長度為⌊px⌋、 切掉後長度為x −⌊px⌋。            在記錄下每

NOIP2016組合數問題

本題在洛谷上的連結:https://www.luogu.org/problemnew/show/P2822   就在十一假期某學堂裡有幸聽出題人zhx大神講課。。。 都說是水題,但還是需要技巧滴。首先得知道組合數的那個在楊輝三角里體現得淋漓盡致的性質:c[n][m]=c[n-1][m-1]

P2822組合數問題NOIP2016

題目描述 組合數 Cnm ​表示的是從 n 個物品中選出 m 個物品的方案數。舉個例子,從 (1,2,3) 三個物品中選擇兩個物品可以有 (1,2),(1,3),(2,3) 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 Cnm的一般公式: C nm

2018.11.09NOIP2016洛谷P1600天天愛跑步(樹上差分)

傳送門 解析: 據說這是NOIP歷年最難一道題。。但是真的沒有寶藏難啊我覺得。。。 思路: 答案分兩類統計,一種是子樹中過來,一種是其他地方過來。那麼路徑就被拆分成兩部分了,一部分是S−&gt;lcaS-&gt;lcaS−>lca,一部分

BZOJ4719NOIP2016天天愛跑步

【題目連結】【思路要點】補檔部落格,無題解。【程式碼】#include<bits/stdc++.h> using namespace std; #define MAXN 300005 #define MAXV 600005 #define MAXLOG 20 te

NOIP2016魔法陣(節選自冬雪_狂舞_桀驁-xmy的部落格)

 現在來找找AC方式,首先,剖析題目,列出條件:Xa<Xb<Xc<Xd,Xb-Xa=2(Xd-Xc),Xb-Xa<Xc-Xb/3         遇到這種有條件的題,通常把圖形畫出來比較直觀。

NOIP2016迴文日期

題目描述 在日常生活中,通過年、月、日這三個要素可以表示出一個唯一確定的日期。牛牛習慣用8位數字表示一個日期,其中,前4位代表年份,接下來2位代表月 份,最後2位代表日期。顯然:一個日期只有一種表示方法,而兩個不同的日期的表 示方法不會相同。牛牛認為,一個日期是迴文的,當且僅當表示這個日期的

UOJ265 NOIP2016憤怒的小鳥

1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include &l

bzoj4720noip2016換座位期望dp+Floyd

對於剛上大學的牛牛來說,他面臨的第一個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有2n節 課程安排在n個時間段上。在第i(1≤i≤n)個時間段上,兩節內容相同的課程同時在不同的地點進行,其中,牛牛預先 被安排在教室ci上

NOIP2016提高組憤怒的小鳥(狀壓寬搜)

數組保存 結果 4.0 2.0 pac 之前 第一個 ... 預處理 題目描述 Kiana最近沈迷於一款神奇的遊戲無法自拔。 簡單來說,這款遊戲是在一個平面上進行的。 有一架彈弓位於(0,0)處,每次Kiana可以用它向第一象限發射一只紅色的小鳥,小鳥們的飛行軌跡均為形如的

NOIP2016提高組換教室

algorithm .org pan i++ mes ble 安排 turn 路徑 https://www.luogu.org/problem/show?pid=1850 題面很長,實質很水的一道期望DP題。題面自帶勸退效果。 首先用Floyd算出任意兩點的最短路徑。然後設