NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2003國中組決賽
 E 清單

作者 主題: E 清單  (閱讀 728 次)

rscpp

  • 中級會員
  • ***
  • 文章數: 60
    • 檢視個人資料
E 清單
« 於: 四月 18, 2015, 05:13:47 pm »

代碼: [選擇]
// npsc03-j2e 清單
// 多組資料,每組第1行 n {若n=0結束),接下來n 行,boy m g1 g2 ... gm , boy為男生名,g1,...gm為 m 個女生名
// 每組的第 n+1行一個女生名,輸出其所認識的男生(依字典序)
#include <iostream>
#include <cstring>
#include <map>
#include <set>
using namespace std;
map<string,int> gid; //由姓名查序號
set<string> glist[40]; // 最多40人,每個女生一個,存其所認識的男生
set<string>::iterator it; //
int main( )
{
   int  n,m,i , j , k, gcnt;
   string boy,girl;
   while( cin >> n)
   {
if(n==0) break;
gcnt=0; gid.clear();
for(i=0;i<40;++i) glist[i].clear();
while(n--)
{
cin >> boy >> m;  //某個男生,認識 m 個女生
for(i=0; i<m; ++i)
{
cin >> girl;  //m 個女生之一名
k = gid[girl]; //將姓名轉成序號 k
if(k==0) k = (++gcnt);  //若未出現過,序號+1後當成此女生的序號
// cout <<"["<<k<<"i:"<<boy<<"] ";
gid[girl]=k;
glist[k].insert(boy); //將男生名加入此女生的 清單中
} // end of for(i=0~m-1 m 個 女生
} // end of while(n-- n 個 男生
// 接著讀入要查詢的女生名,查出其序號 k,再由 glist[k]列出其所認識的男生
cin >> girl;
k = gid[girl];     // 若為0沒男友,未說明如何處理 cout <<k<<glist[k].size()<<endl;
for(it=glist[k].begin(); it!=glist[k].end(); ++it)
cout << (*it) << " ";
cout << endl;
}
   return 0;
}
/* 範例輸入
3
Npsc 3 Forum Hello World
Abcdefg 0
Zero 1 Hello
Hello
5
D 3 O X Z
E 3 P Q X
B 3 K W X
C 3 V W X
A 3 X Y Z
X
-------輸出
Npsc Zero
A B C D E
*/

« 上次編輯: 四月 18, 2015, 09:31:01 pm 由 rscpp »
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2003國中組決賽
 E 清單