日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-2 港口审查 (15 分)

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-2 港口审查 (15 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:題目

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

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

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

形式化地講,你需要計算n條信息。對于輸出的第i條信息,你需要統計滿足ti?86400<tp≤ti的船只p,在所有的xp,j中,總共有多少個不同的數。

輸入格式:
第一行輸入一個正整數n,表示小K統計了n艘船的信息。

接下來n行,每行描述一艘船的信息:前兩個整數ti和ki分別表示這艘船到達海港的時間和船上的乘客數量,接下來ki個整數表示船上乘客的國籍。

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

保證 1≤n≤10^5,∑ki ≤ 3?105,1≤xi,j≤105,1≤t(i-1)≤ti≤10^9

其中∑ki表示所有的ki的和。

輸出格式:
輸出n行,第i行輸出一個整數表示第i艘船到達后的統計信息。

輸入樣例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解釋:

第一艘船在第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個不同的國家。

樣例2解釋:

第一艘船在第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個不同的國家。

二:上碼(這個碼有問題 測試點第二個超時 分享出來 希望可以指錯 )

/**思路:1.題目寫的挺復雜,所以我們就要精簡題目,也就是只看輸入和輸出分析數據和末尾給出的解釋。 2.因為我們是要統計24小時以內的數據,所以我們需要判斷每次的到達時間和前面的時間的關系。如果與其做減法小于86400,那么說明在24小時以內,這時我們統計不同的國籍個數,需要從前面的時間有多少個不同國籍數進行統計,那么這時我們就需要用到一對多的容器map<int,vector<int> >; 在用set容器裝下每個時間對應的國籍數(用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;//統計24小時以內的不同的國籍個數 vector<int> v2;//記錄時間 vector<int> v3;//處理每個時間所對應的國籍號碼 map<int,vector<int> > m; //統計每個時間不同的國籍個數 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);//這里主要是處理第一個時間對應的國籍個數 }m[time] = v3;v3.clear();if(i != 0){for(int j = 0; j < v2.size()-1; j++){if(time - v2[j] < 86400){//說明在24小時以內 v2[j]往后的所有時間均是在24小時以內的 set<int> s; for(mt = m.begin(); mt != m.end(); mt++){if(mt->first >= v2[j]){//這里表示的是我們選擇的是所有在24小時以內 vector<int>:: iterator vt;for(vt = mt->second.begin(); vt != mt->second.end(); vt++){//遍歷每個時間對應的國籍號 s.insert(*vt); // cout << *vt << ' '; } } } // cout << endl; v1.push_back(s.size()); break;//跳出這個循環,因為我們已經統計完了24小時以內的不同的國籍的個數 } } } else{v1.push_back(s_one.size());//記錄首個時間的國籍個數 } }for(int i = 0; i < v1.size(); i++) {//cout << v1[i] << endl;printf("%d\n",v1[i]);}

如果同學會做這道題可以私信我,關于超時的 我感覺八成我的思路可能會有問題,如果你有思路可以留言或則私信

總結

以上是生活随笔為你收集整理的7-2 港口审查 (15 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。