#include<algorithm>
使用格式:
find(数组的头地址, 数组的尾地址, 要找的数)
或者
数组.find(要找的数)
find(nums.begin(), nums.end(), target)
vector<int> nums = {2,7,8,8,9};
find(nums,nums+5,2)返回2的地址,若find 8,则返回第一个8的地址
或者
nums.find(要找的数)
返回的是target第一次出现的地址
因为end不在查找范围内,所以可以作为是否找到的依据
所以,如果没有找到返回尾地址nums.end()
(如果没有找到指出的对象,就会返回nums.end()的值,要是找到了就返回一个指着找到的对象的iterator)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<set>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int MAXN=1005;
const double eps=1e-8;
set<int>s[55];//用set容器,将一个集合中的重复元素删掉
int main(void){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int m,x;
scanf("%d",&m);
while(m--){
scanf("%d",&x);
s[i].insert(x);
}
}
int k,a,b;
scanf("%d",&k);
while(k--){
scanf("%d %d",&a,&b);
int cnta=s[a].size(),cntb=s[b].size(),cnt=0;
for(set<int>::iterator it=s[a].begin();it!=s[a].end();++it)//遍历选中的两个数组中的第一个{
if(s[b].find(*it)!=s[b].end()){
cnt++;
}//用find函数寻找此时第一个数组中的这个元素是否存在与第二个数组中,若没有则cnt++,即总的不相同的元素
}
printf("%.2lf%\n",cnt*1.0/(cntb+cnta-cnt)*100);
}
return 0;
}
set容器也是STL里的,可以格外再看下