pat乙级1065. 单身狗(25)
2018-03-31 13:49
267 查看
1065. 单身狗(25)
时间限制300 ms内存限制65536 kB
代码长度限制8000 B
判题程序Standard作者CHEN, Yue
“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。输入格式:输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数;随后N行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为参加派对的总人数;随后一行给出这M位客人的ID,以空格分隔。题目保证无人重婚或脚踩两条船。输出格式:首先第一行输出落单客人的总人数;随后第二行按ID递增顺序列出落单的客人。ID间用1个空格分隔,行的首尾不得有多余空格。输入样例:
3 11111 22222 33333 44444 55555 66666 7 55555 44444 10000 88888 22222 11111 23333输出样例:
5 10000 23333 44444 55555 88888
算法设计:
由于ID号都在00000~99999之间,可以定义一个长度为10^5的一维数组hashTable,数组下标表示ID号,数组元素表示对应的配偶的ID号,没有配偶的数组元素设置为-1 。另外定义一个set,在输入M位客人的过程中,如果该客人没有配偶,直接将ID号加入set中,如果有配偶,在set中查找是否包含其配偶的ID,如果不包含,将该客人的ID号加入set中;如果包含,在set中删除其配偶的ID 。最后set中储存的就是落单的客人,输出即可。c++代码:
#include<bits/stdc++.h> using namespace std; const int INF=1e5; int hashTable[INF];//辅助数组 int main() { int N; scanf("%d",&N); memset(hashTable,-1,sizeof(hashTable));//将hashTable初始化为-1 while(N--){ int a,b; scanf("%d%d",&a,&b); hashTable[a]=b; hashTable[b]=a; } scanf("%d",&N); set<int>s; while(N--){ int a; scanf("%d",&a); if(hashTable[a]==-1)//如果该客人没有配偶 s.insert(a);//直接将ID号加入set中 else{ auto i=s.find(hashTable[a]);//在set中查找是否包含其配偶的ID if(i==s.cend())//不包含其配偶的ID s.insert(a);//直接将ID号加入set中 else//包含其配偶的ID s.erase(i);//在set中删除其配偶的ID } } //输出 printf("%d\n",s.size()); for(auto i=s.cbegin();i!=s.cend();++i) printf("%s%05d",i==s.cbegin()?"":" ",*i); return 0; }
相关文章推荐
- [PAT乙级]1065. 单身狗(25)
- PAT乙级 1065. 单身狗(25)
- PAT 乙级 1065. 单身狗(25)
- 1065. 单身狗(25) PAT乙级真题
- 乙级 PAT 1065. 单身狗(25)
- PAT乙级1065. 单身狗(25)
- PAT乙级真题 1065. 单身狗(25)
- PAT 乙级 1065. 单身狗(25)
- PAT乙级 1065. 单身狗(25)
- 1065. 单身狗(25)-PAT乙级真题
- PAT 乙级 1065单身狗(25) 情人节做这题真的是太合适了~
- pat 乙级 1065. 单身狗(25)
- 1065. 单身狗(25) PAT乙级&&1121. Damn Single (25) PAT 甲级
- PAT乙级 1065 单身狗题目
- PAT Basic 1065. 单身狗(25)(C语言实现)
- PAT 1065. 单身狗(25)
- PAT BASIC LEVEL 1065. 单身狗(25)
- PAT1065 单身狗(25)
- [PAT-乙级]1065.单身狗
- 1065. 单身狗(25) PAT