AT_arc033_2 [ARC033B] メタ構文変数

题目描述

像「$ foo $」、「$ bar $」、「$ hoge $」这样的字符串,常被用作没有特定含义的变量名,这类字符串被称为“元语法变量”。 高桥君正在研究元语法变量。他发现元语法变量有很多种类,并且给他找到的每一个元语法变量都编了号。高桥君阅读了 $ Ant $ 和 $ Bug $ 的源代码,并列举出了它们各自代码中出现的元语法变量的编号。为了研究 $ Ant $ 和 $ Bug $ 使用的元语法变量集合有多相似,他决定计算它们集合的「$ Jaccard $ 系数」。设 $ Ant $ 的源代码中出现的元语法变量集合为 $ S_A $,$ Bug $ 的为 $ S_B $,则这两个集合的 $ Jaccard $ 系数为: - $ ||S_{A}\ ∩\ S_{B}||\ /\ ||S_{A}\ ∪\ S_{B}|| $ 其中,$ ||S|| $ 表示集合 $ S $ 的元素个数。换句话说, - 「$ S_{A} $ 和 $ S_{B} $ 都出现的元素个数」$ / $「$ S_{A} $ 和 $ S_{B} $ 至少有一个出现的元素个数」

输入格式

输入通过标准输入按以下格式给出。 > $ N_A $ $ N_B $ $ A_1 $ $ A_2 $ ... $ A_{N_A} $ $ B_1 $ $ B_2 $ ... $ B_{N_B} $ - 第 $ 1 $ 行包含两个整数 $ N_A\ (1\leq N_A\leq 10^5),\ N_B\ (1\leq N_B\leq 10^5) $,表示 $ Ant $ 的源代码中出现了 $ N_A $ 个元语法变量,$ Bug $ 的源代码中出现了 $ N_B $ 个元语法变量。 - 第 $ 2 $ 行包含 $ N_A $ 个整数,空格分隔,第 $ i $ 个整数 $ A_i\ (1\leq A_i\leq 10^9) $ 表示 $ Ant $ 的源代码中出现了编号为 $ A_i $ 的元语法变量。保证 $ p\neq q $ 时 $ A_p\neq A_q $。 - 第 $ 3 $ 行包含 $ N_B $ 个整数,空格分隔,第 $ i $ 个整数 $ B_i\ (1\leq B_i\leq 10^9) $ 表示 $ Bug $ 的源代码中出现了编号为 $ B_i $ 的元语法变量。保证 $ p\neq q $ 时 $ B_p\neq B_q $。

输出格式

请输出 $ Ant $ 和 $ Bug $ 的源代码中出现的元语法变量集合的 $ Jaccard $ 系数,输出一行。小数点后可以输出任意位数,但绝对误差不得超过 $ 10^{-6} $。输出末尾需换行。

说明/提示

## 部分分 本题设置了部分分。 - 若能正确解决所有满足 $ N_A,N_B\leq 1000 $ 且 $ A_i,B_i\leq 10^5 $ 的测试点,可得 $ 40 $ 分。 - 若能正确解决所有满足 $ A_i,B_i\leq 10^5 $ 的测试点,可得 $ 70 $ 分。 ## 样例解释 1 $ Ant $ 和 $ Bug $ 的源代码中都出现的元语法变量只有编号 $ 1 $,而至少在 $ Ant $ 或 $ Bug $ 的源代码中出现的元语法变量有 $ 1,2,3,5 $ 共 $ 4 $ 个。因此,$ Jaccard $ 系数为 $ 1/4 $。 由 ChatGPT 4.1 翻译