1065 單身狗 25 分

2021-09-24 03:22:39 字數 3749 閱讀 3527

題意描述:

「單身狗」是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。

輸入格式:

輸入第一行給出乙個正整數 n(≤ 50 000),是已知夫妻/伴侶的對數;隨後 n 行,每行給出一對夫妻/伴侶——為方便起見,每人對應乙個 id 號,為 5 位數字(從 00000 到 99999),id 間以空格分隔;之後給出乙個正整數 m(≤ 10 000),為參加派對的總人數;隨後一行給出這 m 位客人的 id,以空格分隔。題目保證無人重婚或腳踩兩條船。

輸出格式:

首先第一行輸出落單客人的總人數;隨後第二行按 id 遞增順序列出落單的客人。id 間用 1 個空格分隔,行的首尾不得有多餘空格。

輸入樣例:

3

11111 22222

33333 44444

55555 66666

755555 44444 10000 88888 22222 11111 23333

輸出樣例:

5

10000 23333 44444 55555 88888

解題思路:bob: 這道題目標題看起來好刺激啊, 單身狗!!單身! 狗!

alice: (¦3」∠),(白眼,默默讀題)

bob: 落單的客人,題目解釋的不很清楚啊,看看樣例。

alice: 55555 有女朋友啊,怎麼也是落單人士?? [・ヘ・?]

bob: 55555, 他的女朋友是66666,(o(*≧▽≦)ツ她女朋友好六啊)。em…, 我知道了, 因為 66666 沒去參加派對,所以他就落單了。

alice: 原來是這樣,那落單人士就要分成兩種了,一種是純單身狗,一種是拋下伴侶獨自一人參加派對的。

bob: 對呀,再看下輸出,

隨後第二行按 id 遞增順序列出落單的客人。id 間用 1 個空格分隔,行的首尾不得有多餘空格。

如果沒有落單的人士那不就皆大歡喜了,那我們第二行該怎麼輸出呢?

alice: 什麼也不輸出,沒有就是沒有唄。

bob: 你想寫python版本的還是c++的,你挑乙個,剩下的我寫吧。

alice: 都是你寫,o(*≧▽≦)ツ,讓你六。

bob: (¦3」∠)

**:

def

main()

: n =

int(

input()

)# 接收輸入的正整數 n

data =

# 用來儲存情侶之間的指向關係

for x in

range

(n):

# 依次讀入每對夫妻或者情侶的姓名

alice, bob =

(int

(x)for x in

input()

.split())

data[alice]

= bob

data[bob]

= alice

# 情侶雙方相親相愛,都認同互為對方情侶

m =int(

input()

)# 接收正整數 m, m 為參加派代的人數

guests =

[int

(x)for x in

input()

.split()]

# 接收所有參加派代的人的id, 以整數列表的形式儲存

guests.sort(

)# 對參加派對的人的id排序,因為題目中要求按落單人士的id增序輸出,所以在這裡先排序。

guests =

dict

(zip

(guests,

range

(len

(guests)))

) bachelors =

# 記錄落單人士的id

for x in guests:

#對於來參加派對的每個人

if x not

in data:

# 沒有伴侶或者丈夫或者妻子的 純 單身人士"".

format

(x))

# 格式化其id,並新增到落單人士中

else

:# 有 伴侶的

if data[x]

notin guests:

# 但是 伴侶 並為來參加 派對的 落單人士"".

format

(x))

print

(len

(bachelors)

)# 輸出所有落單人士的總數

iflen

(bachelors)

:# 如果有落單人士

print

(" "

.join(bachelors)

)# 按要求輸出他們的id

# 沒有落單人士請不要輸出空格之類的東西

if __name__ ==

'__main__'

: main(

)

#include

#include

#include

// 下文要使用vector容器

#define nn 100000 + 10

// 巨集定義, 方便下面定義陣列大小

using namespace std;

vector<

int> bachelors;

// 宣告乙個整數vector容器,即乙個整型的動態陣列

intmain()

scanf

("%d"

,&m)

;for

(int i=

0; i

++i)

for(

int i=

0; i

++i)

else}}

}printf

("%d\n"

, bachelors.

size()

);// 輸出落單人士的總數

if(bachelors.

size()

)printf

("%05d\n"

, bachelors[bachelors.

size()

-1])

;//最後乙個落單人士,輸出id和換行。

}// 這裡面怎麼沒有對落單人士的id進行排序呀 ?

// 我們在確定每個參加派對的人是否落單的時候就是按照ta們id遞增的順序進行的,所以

// bachelors中的id就是遞增的,無需再排序。

return0;

}

易錯點:總結:python 版本用時

c++ 版本用時

最後:

以及:啷個哩個啷

1065 單身狗 25 分

單身狗 是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。輸入第一行給出乙個正整數 n 50 000 是已知夫妻 伴侶的對數 隨後 n 行,每行給出一對夫妻 伴侶 為方便起見,每人對應乙個 id 號,為 5 位數字 從 00000 到 99999 id 間以...

1065 單身狗 25 分

單身狗 是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。輸入第一行給出乙個正整數 n 50 000 是已知夫妻 伴侶的對數 隨後 n 行,每行給出一對夫妻 伴侶 為方便起見,每人對應乙個 id 號,為 5 位數字 從 00000 到 99999 id 間以...

1065 單身狗 25分

單身狗 是中文對於單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。輸入第一行給出乙個正整數 n 50 000 是已知夫妻 伴侶的對數 隨後 n 行,每行給出一對夫妻 伴侶 為方便起見,每人對應乙個 id 號,為 5 位數字 從 00000 到 99999 id 間以...