7-2 港口审查 (15 分)
一:題目
afeng是一個(gè)港口的海關(guān)工作人員,每天都有許多船只到達(dá)港口,船上通常有很多來(lái)自不同國(guó)家的乘客。
afeng對(duì)這些到達(dá)港口的船只非常感興趣,他按照時(shí)間記錄下了到達(dá)港口的每一艘船只情況;對(duì)于第i艘到達(dá)的船,他記錄了這艘船到達(dá)的時(shí)間ti (單位:秒),船上的乘客數(shù)ki,以及每名乘客的國(guó)籍 xi,1,xi,2,…,xi,k。
afeng統(tǒng)計(jì)了n艘船的信息,希望你幫忙計(jì)算出以每一艘船到達(dá)時(shí)間為止的24小時(shí)(24小時(shí)=86400秒)內(nèi)所有乘船到達(dá)的乘客來(lái)自多少個(gè)不同的國(guó)家。
形式化地講,你需要計(jì)算n條信息。對(duì)于輸出的第i條信息,你需要統(tǒng)計(jì)滿足ti?86400<tp≤ti的船只p,在所有的xp,j中,總共有多少個(gè)不同的數(shù)。
輸入格式:
第一行輸入一個(gè)正整數(shù)n,表示小K統(tǒng)計(jì)了n艘船的信息。
接下來(lái)n行,每行描述一艘船的信息:前兩個(gè)整數(shù)ti和ki分別表示這艘船到達(dá)海港的時(shí)間和船上的乘客數(shù)量,接下來(lái)ki個(gè)整數(shù)表示船上乘客的國(guó)籍。
保證輸入的ti是遞增的,單位是秒;表示從afeng第一次上班開(kāi)始計(jì)時(shí),這艘船在第ti秒到達(dá)海港。
保證 1≤n≤10^5,∑ki ≤ 3?105,1≤xi,j≤105,1≤t(i-1)≤ti≤10^9
其中∑ki表示所有的ki的和。
輸出格式:
輸出n行,第i行輸出一個(gè)整數(shù)表示第i艘船到達(dá)后的統(tǒng)計(jì)信息。
輸入樣例1:
3
1 4 4 1 2 2
2 2 2 3
10 1 3
結(jié)尾無(wú)空行
輸出樣例1:
3
4
4
結(jié)尾無(wú)空行
輸入樣例2:
4
1 4 1 2 2 3
3 2 2 3
86401 2 3 4
86402 1 5
結(jié)尾無(wú)空行
輸出樣例2:
3
3
3
4
結(jié)尾無(wú)空行
樣例1解釋:
第一艘船在第1秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第一艘船,共有4個(gè)乘客, 分別是來(lái)自國(guó)家4,1,2,2,共來(lái)自3個(gè)不同的國(guó)家;
第二艘船在第2秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第一艘船和第二艘船,共有4+2=6個(gè)乘客,分別是來(lái)自國(guó)家4,1,2,2,2,3,共來(lái)自4個(gè)不同的國(guó)家;
第三艘船在第10秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第一艘船、第二艘船和第 三艘船,共有4+2+1=7個(gè)乘客,分別是來(lái)自國(guó)家4,1,2,2,2,3,3,共來(lái)自4個(gè)不同的國(guó)家。
樣例2解釋:
第一艘船在第1秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第一艘船,共有4個(gè)乘客,分別是來(lái)自國(guó)家1,2,2,3,共來(lái)自3個(gè)不同的國(guó)家。
第二艘船在第3秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第一艘船和第二艘船,共有4+2=6個(gè)乘客,分別是來(lái)自國(guó)家1,2,2,3,2,3,共來(lái)自3個(gè)不同的國(guó)家。
第三艘船在第86401秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第二艘船和第三艘船,共有2+2=4個(gè)乘客,分別是來(lái)自國(guó)家2,3,3,4,共來(lái)自3個(gè)不同的國(guó)家。
第四艘船在第86402秒到達(dá)港口,最近24小時(shí)到達(dá)的船是第二艘船、第三艘船和第四艘船,共有2+2+1=5個(gè)乘客,分別是來(lái)自國(guó)家2,3,3,4,5,共來(lái)自4個(gè)不同的國(guó)家。
二:上碼(這個(gè)碼有問(wèn)題 測(cè)試點(diǎn)第二個(gè)超時(shí) 分享出來(lái) 希望可以指錯(cuò) )
/**思路:1.題目寫(xiě)的挺復(fù)雜,所以我們就要精簡(jiǎn)題目,也就是只看輸入和輸出分析數(shù)據(jù)和末尾給出的解釋。 2.因?yàn)槲覀兪且y(tǒng)計(jì)24小時(shí)以內(nèi)的數(shù)據(jù),所以我們需要判斷每次的到達(dá)時(shí)間和前面的時(shí)間的關(guān)系。如果與其做減法小于86400,那么說(shuō)明在24小時(shí)以內(nèi),這時(shí)我們統(tǒng)計(jì)不同的國(guó)籍個(gè)數(shù),需要從前面的時(shí)間有多少個(gè)不同國(guó)籍?dāng)?shù)進(jìn)行統(tǒng)計(jì),那么這時(shí)我們就需要用到一對(duì)多的容器map<int,vector<int> >; 在用set容器裝下每個(gè)時(shí)間對(duì)應(yīng)的國(guó)籍?dāng)?shù)(用set主要目的是為了去重) 31 4 4 1 2 22 2 2 310 1 341 4 1 2 2 33 2 2 386401 2 3 486402 1 5 */ #include<iostream> #include<map> #include<vector> #include<set> using namespace std;int main(){vector<int> v1;//統(tǒng)計(jì)24小時(shí)以內(nèi)的不同的國(guó)籍個(gè)數(shù) vector<int> v2;//記錄時(shí)間 vector<int> v3;//處理每個(gè)時(shí)間所對(duì)應(yīng)的國(guó)籍號(hào)碼 map<int,vector<int> > m; //統(tǒng)計(jì)每個(gè)時(shí)間不同的國(guó)籍個(gè)數(shù) map<int,vector<int> >:: iterator mt;int N;//cin >> N;scanf("%d",&N);for(int i = 0; i < N; i++) {int time,M;//cin >> time >> M;scanf("%d%d",&time,&M);v2.push_back(time);set<int> s_one;for(int j = 0; j < M; j++) { int num;//cin >> num;scanf("%d",&num);v3.push_back(num); s_one.insert(num);//這里主要是處理第一個(gè)時(shí)間對(duì)應(yīng)的國(guó)籍個(gè)數(shù) }m[time] = v3;v3.clear();if(i != 0){for(int j = 0; j < v2.size()-1; j++){if(time - v2[j] < 86400){//說(shuō)明在24小時(shí)以內(nèi) v2[j]往后的所有時(shí)間均是在24小時(shí)以內(nèi)的 set<int> s; for(mt = m.begin(); mt != m.end(); mt++){if(mt->first >= v2[j]){//這里表示的是我們選擇的是所有在24小時(shí)以內(nèi) vector<int>:: iterator vt;for(vt = mt->second.begin(); vt != mt->second.end(); vt++){//遍歷每個(gè)時(shí)間對(duì)應(yīng)的國(guó)籍號(hào) s.insert(*vt); // cout << *vt << ' '; } } } // cout << endl; v1.push_back(s.size()); break;//跳出這個(gè)循環(huán),因?yàn)槲覀円呀?jīng)統(tǒng)計(jì)完了24小時(shí)以內(nèi)的不同的國(guó)籍的個(gè)數(shù) } } } else{v1.push_back(s_one.size());//記錄首個(gè)時(shí)間的國(guó)籍個(gè)數(shù) } }for(int i = 0; i < v1.size(); i++) {//cout << v1[i] << endl;printf("%d\n",v1[i]);}如果同學(xué)會(huì)做這道題可以私信我,關(guān)于超時(shí)的 我感覺(jué)八成我的思路可能會(huì)有問(wèn)題,如果你有思路可以留言或則私信
總結(jié)
以上是生活随笔為你收集整理的7-2 港口审查 (15 分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 7-1 字母统计图 (10 分)(思路+
- 下一篇: 腾讯如何打造新基建时代高可扩展的区块链引