题解:CF1045I Palindrome Pairs
题目链接:link。
首先上思路:
如果一个字符串是回文串,只有当其中最多的只有一个字符的出现次数是奇数。
注意我们可以将每个字符串的字符出现次数的奇偶性用一个 \(26\) 位的二进制表示。
接下来就是是回文对的条件:
我们分为 \(2\) 种情况。
第一种情况:
两个字符串的二进制表示完全相同。那么也就是两个字符串的字符出现次数的奇偶性完全相同,所以拼接后的字符串中每个字符的出现次数都是偶数,所以它们可以构成回文串。
第二种情况:
两个字符串的二进制表示只有一位不相同。那么也就是拼接后的字符串也只有一个字符出现次数是奇数,所以它们也可以构成回文串。
最后就是统计回文串了!
我们可以使用哈希表 mp
用来记录每个二进制表示的出现次数。然后用 ct
来记录每个二进制表示可以匹配的次数。
那么最后的答案就是两种情况的和。
如果还不懂看看代码吧!
#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
#define i_will signed
#define ak main
#define IMO ()
#define int long long
I AK IOI;
/*mp 记录每个二进制表示的出现次数,ct 记录每个二进制表示可以被匹配的次数*/
unordered_map<int,int>mp,ct;
vector<int>v;//存储所有二进制表示
/*n 表示字符串数量,x 表示当前字符串的二进制表示,res 代表结果*/
int n,x,res;
i_will ak IMO{
cin>>n;
for(int e=1;e<=n;e++){
x=0;
string s;
cin>>s;
for(int i=0;i<s.size();i++)x^=(1<<(s[i]-'a'));//将字符串奇偶性记录到二进制表示中
v.push_back(x);
for(int i=0;i<26;i++)if(((x>>i)&1)==0)ct[(x+(1<<i))]++;//记录当前二进制表示仅有一位不同
mp[x]++;
}
for(auto e:mp)res+=e.second*(e.second-1)/2;
for(auto t:v)res+=ct[t];
cout<<res;
i_ak ioi;
}
时间复杂度:\(O(N\times L)\),其中 \(L\) 是字符串的平均长度。
空间复杂度:\(O(N)\)。
亲测可过,请勿抄袭!
题解:CF1045I Palindrome Pairs的更多相关文章
- 【题解】Palindrome pairs [Codeforces159D]
[题解]Palindrome pairs [Codeforces159D] 传送门:\(Palindrome\) \(pairs\) \([CF159D]\) [题目描述] 给定一个长度为 \(N\) ...
- LeetCode 336. Palindrome Pairs
原题链接在这里:https://leetcode.com/problems/palindrome-pairs/ 题目: Given a list of unique words, find all p ...
- DP VK Cup 2012 Qualification Round D. Palindrome pairs
题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...
- 336. Palindrome Pairs(can't understand)
Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that t ...
- leetcode 132 Palindrome Pairs 2
lc132 Palindrome Pairs 2 大致与lc131相同,这里要求的是最小分割方案 同样可以分割成子问题 dp[i][j]还是表示s(i~j)是否为palindrome res[i]则用 ...
- leetcode 131 Palindrome Pairs
lc131 Palindrome Pairs 解法1: 递归 观察题目,要求,将原字符串拆成若干子串,且这些子串本身都为Palindrome 那么挑选cut的位置就很有意思,后一次cut可以建立在前一 ...
- 【LeetCode】336. Palindrome Pairs 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 HashTable 相似题目 参考资料 日期 题目地 ...
- [LeetCode] Palindrome Pairs 回文对
Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that t ...
- 【LeetCode】Palindrome Pairs(336)
1. Description Given a list of unique words. Find all pairs of distinct indices (i, j) in the given ...
- Palindrome Pairs -- LeetCode 336
Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that t ...
随机推荐
- 怎么给EXE文件加启动参数
第一步 首先右键单击 exe 文件文件,创建 exe 文件的快捷方式. 第二步 右键单击此快捷方式--属性. 在快捷方式属性界面,点击目标后面的链接. 先打一个空格然后输入参数,然后点击应用按钮.确定 ...
- Mac port 443: Connection refused
MAC 安装brew raw.githubusercontent.com port 443: Connection refused 本人亲自认证过,踩过多种方案,最终认证的解决方案 原因:由于某些你懂 ...
- 多态的转型和案例--java进阶day02
1.多态的转型 1.向上转型 我们之前学的多态创建对象,使用的都是向上转型,父类引用指向子类(赋值方式则是从子到父),f拿到子类的地址,就能访问子类的堆内存 2.向下转型 和向上转型相反,子类引用指向 ...
- 【SpringMVC】概述
SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MV ...
- 【Python】PDF文档导出指定章节为TXT
PDF文档导出指定章节为TXT 需求 要导出3000多个pdf文档的特定章节内容为txt格式(pdf文字可复制). 解决 导出PDF 查了一下Python操作PDF文档的方法,主要是通过3个库,PyP ...
- 《机器人SLAM导航核心技术与实战》第1季:第7章_SLAM中的数学基础
<机器人SLAM导航核心技术与实战>第1季:第7章_SLAM中的数学基础 视频讲解 [第1季]7.第7章_SLAM中的数学基础-视频讲解 [第1季]7.1.第7章_SLAM中的数学基础_S ...
- datasnap的restful服务器
说真话,这玩意真的简单好用.但你要控制好: 1.内存泄漏和异常处理好: 2.有没有发现,通过服务器对数据库进行读写时,在资源管理器中,如果是sql server,就会看到连接1433的连接一直挂在那里 ...
- Linux四剑客grep、find、sed、awk使用
介绍 Linux四剑客是指在Linux系统中非常常用的四个命令工具,它们分别是grep.find.sed和awk.这四个工具在Linux系统中具有非常强大的功能,可以方便快捷地对文本进行搜索.处理 ...
- 编译nwjs/node-webkit可用的sqlite3简单靠谱的解决方案/在nwjs里使用sqlite
大胸弟,如果你和我一样把官方给的方法和网上的文章都试过了还是编译不过,但又必须在nwjs里使用sqlite数据库,那么请继续往下看. 我的解决方法就是: 1.不编译 来吧,拥抱html5吧,具体来说就 ...
- FastAPI与Tortoise-ORM模型配置及aerich迁移工具
title: FastAPI与Tortoise-ORM模型配置及aerich迁移工具 date: 2025/04/30 00:11:45 updated: 2025/04/30 00:11:45 au ...