离散题目4
Time Limit: 1000MS
Memory Limit: 65536KB
blablabla: 发现自己好多东西还不会,同级中的菜鸡。。
。。。多看书多百度多敲
Problem Description
题目给出两个非空整数集,请写出程序求两个集合的交集。
Input
多组输入,每组输入包括两行,第一行为集合A的元素,第二行为集合B的元素。具体参考示例输入。 每个集合元素个数不大于3000,每个元素的绝对值不大于2^32 - 1。
Output
每组输入对应一行输出,为A、B的交集,如果交集为空输出"NULL",否则交集的元素按递增顺序输出,每个元素之间用空格分割。
Example Input
1 2 3 4 5 1 5 3 6 7 1 2 4 5 3 6 7 8 9 10
Example Output
1 3 5 NULL
Hint
Author
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i,j;
int n,m;
vector<int> a,b;
vector<int>::iterator it;
string buf,ac,bc;
int t;
while(getline(cin,ac))//getline 读取一行字符串
{
getline(cin,bc);
stringstream ss(ac); //神奇的可以过滤空格的字符串流
while(ss >> t)
{
a.push_back(t);//挨个存到a中
}
stringstream cc(bc);
while(cc >> t)
{
b.push_back(t);
}
int i,flag=0;
sort(a.begin(),a.end());//从小到大排序
sort(b.begin(),b.end());
for(i=0;i<a.size();i++)
{
it= find(b.begin(),b.end(),a[i]); //find 从b中寻找a[i]是否存在 返回对应位置
if(it!=b.end())//如果找到的话
{
if(flag) printf(" ");//控制格式。。
printf("%d",*it);
b.erase(it);//删除掉b中这个元素
flag++;
}
}
if(!flag) printf("NULL");
printf("\n");
a.clear();
b.clear();
}
return 0;
}