pat 1065. 单身狗(25)

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数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

思路有很多种我想的是给他用下标对应的方式吧情侣存起来如果如果找的第一个就找他的伴侣找到了就kill了他们然后剩下的就都是单身狗啦 doge!

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm> 
using namespace std;
int main()
{
  int n,i,j;
  scanf("%d",&n);
  int a,b;
  vector<int>aa;
  vector<int>bb;
  vector<int>cc;
  vector<int>::iterator a1,b1;
  for(i=0;i<n;i++)
  {
    scanf("%d%d",&a,&b);
    aa.push_back(a);
    bb.push_back(b);
  }
  int f;
  scanf("%d",&f);
  int s,ss;
  int c;
  for(i=0;i<f;i++)
  {
    scanf("%d",&c);
    cc.push_back(c);
  }
  for(i=0;i<n;i++)
  {
    a1=find(cc.begin(),cc.end(),aa[i]);
    if(a1==cc.end())continue;
    b1=find(cc.begin(),cc.end(),bb[i]);
    if(b1==cc.end())continue;
    cc.erase(a1);
    b1=find(cc.begin(),cc.end(),bb[i]);//这边因为存在迭代器里面删了一个位置就变了,要在把他找出来,跑不掉的。
    cc.erase(b1);
  }
  sort(cc.begin(),cc.end());
  printf("%d\n",cc.size());
  for(i=0;i<cc.size();i++)
  {
    if(i!=0)printf(" ");
    printf("%05d",cc[i]);
  }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/paycho/article/details/80054923