AT [ARC033B] メタ構文変数

· · 题解

思路

首先转化一下题意,交集就是统计在两个集合出现两次的元素,并集就是两个集合存在一块减去交集。

直接考虑两个 STL 容器的特性。由于元素的范围很大,可以使用 map 作为桶进行统计;set 是集合,可以直接为两个集合去掉交集,也就是去重。

AC Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int a[N],n,m,t,k;
vector<int>e[N];
bool vis[N];
string s;
set<int>st;
map<int,int>mp;
signed main(){
    cin>>n>>m;
    int n_m=n+m;
    for(int i=1;i<=n_m;i++){
        int x;
        cin>>x;
        st.insert(x);
        mp[x]++;
    }
    for(auto i:mp) if(i.second>=2) k++;
    int _size=st.size();
    printf("%.8f\n",(k*1.0/_size));
    return 0;
}