题目
pata1063
题目思路
对于每一组输入的数据采取一个set容器来储存,则筛除了重复的项,之后对需要统计的两个容器里的数据从低到高遍历记录重复数字即可。
参考代码
#include<iostream>
#include<set>
using namespace std;
set <int> a[50];
int main()
{
int n=0,m=0,k=0,l1=0,l2=0,s1=0,s2=0,t=0,b=0;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&m);
for(int j=0;j<m;j++)
{
scanf("%d",&t);
a[i].insert(t);
}
}
scanf("%d",&k);
for(int i=0;i<k;i++)
{
b=0;
scanf("%d %d",&l1,&l2);
s1=a[l1-1].size();
s2=a[l2-1].size();
set<int>::iterator it1=a[l1-1].begin();
set<int>::iterator it2=a[l2-1].begin();
while(it1!=a[l1-1].end()&&it2!=a[l2-1].end())
{
if(*it1>*it2)
it2++;
else if(*it1<*it2)
*it1++;
else
{
b++;
*it1++;
*it2++;
}
}
double bs=1.0*(s1+s2-b);
double mu=b*1.0;
printf("%.1lf%%",mu/bs*100);
if(i<k-1)
printf("\n");
}
return 0;
}