CF1045I Palindrome Pairs

题目描述

在学习了许多关于太空探索的知识后,一个名叫 Ana 的小女孩想换个话题。 Ana 是一个非常喜欢回文串(即正着读和反着读都相同的字符串)的女孩。她已经学会了如何判断一个给定的字符串是否为回文串,但很快她对这个问题感到厌倦,于是她想出了一个更有趣的问题,现在需要你的帮助来解决: 给定一个只包含小写英文字母的字符串数组。你的任务是找出数组中有多少个“回文对”。一个“回文对”指的是一对字符串,满足以下条件:将这两个字符串拼接后,存在至少一种排列方式使得该字符串为回文串。换句话说,假设你有两个字符串,比如 "aab" 和 "abcac",拼接后得到 "aababcac",你需要判断是否存在该字符串的某种排列是回文串(在这个例子中,存在排列 "aabccbaa")。 如果两个对中的字符串下标不同,则认为它们是不同的对。下标为 $ (i,j) $ 的字符串对与 $ (j,i) $ 被认为是相同的对。

输入格式

第一行包含一个正整数 $N$($1 \le N \le 100\,000$),表示输入数组的长度。 接下来的 $N$ 行,每行包含一个字符串(由小写英文字母 'a' 到 'z' 组成),表示输入数组的一个元素。 输入数组中所有字符串的总字符数小于 $1\,000\,000$。

输出格式

输出一个整数,表示数组中有多少个回文对。

说明/提示

第一个样例: 1. aa $ + $ bb $\to$ abba。 第二个样例: 1. aab $ + $ abcac $ = $ aababcac $\to$ aabccbaa 2. aab $ + $ aa $ = $ aabaa 3. abcac $ + $ aa $ = $ abcacaa $\to$ aacbcaa 4. dffe $ + $ ed $ = $ dffeed $\to$ fdeedf 5. dffe $ + $ aade $ = $ dffeaade $\to$ adfaafde 6. ed $ + $ aade $ = $ edaade $\to$ aeddea 由 ChatGPT 4.1 翻译