题目大意是:输入n组数,如果每组数有交集,那么求并集,如果没有交集,则不求,输出并集的总数和并集最大的元素个数。
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
vector<vector<int>>input;
cin.ignore();
while(n--)
{
string str;
vector<int>vec;
getline(cin,str);
int st=0;
int ed=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==' ')
{
ed=i;
vec.push_back(atoi(str.substr(st,ed).c_str()));
st=i+1;
}
if(i==str.length()-1)
vec.push_back(atoi(str.substr(st,str.length()).c_str()));
}
input.push_back(vec);
vec.clear();
}
// for(int i=0;i<input.size();i++)
// {
// for(int j=0;j<input[i].size();j++)
// {
// cout<<input[i][j]<<" ";
// }
// cout<<endl;
// }
int res=0;
int cnt=0;
for(int i=0;i<input.size();i++)
{
for(int j=0;j<input.size();j++)
{
if(i!=j)
{
vector<int> unionSection(input[i].size()+input[j].size());
vector<int> interSection(min(input[i].size(),input[j].size()));
auto iter1=set_intersection(input[i].begin(),input[i].end(),input[j].begin(),input[j].end(),interSection.begin());
auto iter2=set_union(input[i].begin(),input[i].end(),input[j].begin(),input[j].end(),unionSection.begin()); //ivec为:1,2,3,3,3,4,5,6,7,8,9,10
interSection.resize(iter1-interSection.begin());
unionSection.resize(iter2-unionSection.begin());//重新确定ivec大小
int x=interSection.size();
int y=unionSection.size();
if(x)
cnt++;
res=max(res,y);
}
}
}
cout<<cnt<<endl;
cout<<res<<endl;
return 0;
}