题解:AT_arc033_2 [ARC033B] メタ構文変数

· · 题解

思路:

题目要求求两个集合中相同的元素个数除以两个集合合并在一起并去重后的元素个数。

考虑使用 set

定义两个 set,第一个 set 存第一个集合中的元素,第二个 set 存两个集合的元素。

定义一个变量做两个集合中相同元素的计数器。

在输入时,把两个集合中的元素都放进第二个 set 里。

在输入第二个集合时,顺便判断这个元素是否在第一个集合中出现过,出现过让计数器加一。

最后输出两个集合中相同的元素个数除以两个集合合并在一起并去重后的元素个数就行了。

set 会自动去重。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define itn int
#define ull unsigned long long
set<string>a,all;
string x;
int n,m;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>x;
        a.insert(x);
        all.insert(x);
    }
    int siz=0;
    for(int i=1;i<=m;i++){
        cin>>x;
        all.insert(x);
        if(a.count(x))siz++;
    }
    cout<<double(siz)/all.size();
    return 0;   
}