题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1063
使用set,简单数学题。
// set::find()找不到时返回的是set::end()
//
#pragma warning(disable: 4786)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define SIZE 10000+10
using namespace std;
set<int> All_set[100];
int n, m, k;
void input()
{
int i;
for(i=1; i<=n; i++)
{
scanf("%d", &m);
while(m-- > 0)
{
int t;
scanf("%d", &t);
All_set[i].insert(t);
}
}
}
void processing()
{
scanf("%d", &k);
while(k-- > 0)
{
int set1, set2;
scanf("%d%d", &set1, &set2);
int same=0;
set<int>::iterator it = All_set[set1].begin();
for( ; it != All_set[set1].end(); it++)
{
if(All_set[set2].find((*it)) != All_set[set2].end())
{
same++;
}
}
int total = All_set[set1].size() + All_set[set2].size() - same;
printf("%.1lf%%\n", 100.0*same / total);
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
// input
scanf("%d", &n);
input();
processing();
return 0;
}