Codeforces Round 855 (Div. 3) F. Dasha and Nightmares(题解 + 详细思考过程讲解)
创始人
2024-05-28 15:07:39
0

F. Dasha and Nightmares(二进制)

链接:F. Dasha and Nightmares

题目最重要的破题点思路 即第4点 由某银牌佬提供,唉膜拜大佬。

题意

给定 nnn 个字符串,(1<=n<=2∗105)(1 <=n<=2 * 10^5)(1<=n<=2∗105) 字符串长度之和不超过 5∗1065 *10^65∗106。
求字符串对si,sjsi,sjsi,sj个数,要满足以下条件
条件1.拼接后恰好有 252525 种字母。
条件2.拼接后每个字母个数为奇数。

题解 + 思考过程

1. 最开始想到用二进制,将每个字符串转化为一个长度为 262626 的二进制数,字符 chchch 的个数, 奇数 =1=1=1 ,偶数 =0=0=0
例如 str="a"str = "a"str="a" 二进制串 =1000……= 1000……=1000……, str="ab"=1100……str = "ab" = 1100……str="ab"=1100……, str="aab"=0100……str = "aab" = 0100……str="aab"=0100……
对于条件1:可以想到对于每个字符串枚举哪一个字符舍去。
对于条件2:用位运算直接去找到合法的,异或全 111 二进制数再减去应该舍去的字符位上的1。

2. 但是必须只有 252525 个,但是偶数对应 000, 那么不知道该字符是否有,因为没有该字符为 000 也对应 000。
例如枚举字符 aaa 没有, 但字符串 str="aa"str = "aa"str="aa" ,那么该字符串代表的二进制为全 000,就可以和 字符串 "b∼z""b\sim z""b∼z" 拼接 但拼接后有262626个字母,显然不合法。

3. 于是想到用三进制来表示,0=00 = 00=0, 奇数 =1= 1=1 大于 000 的偶数 =2= 2=2, 用字典树去计算
但是由于 111 对应 000 和 222 (字符串该位上为 111,那么该位上为 000 或 222 的都可以与之拼接)
这样递归时间复杂度可能达到 222 的幂次方级别。不可行。

4. 最后想到 枚举的不存在的那个字符,只有两个字符串都没有该字符才能拼接后满足。
所以我们可以每次遍历不存在 字符 chchch 的字符串集合,这样就不用考虑该位的 000 是大于 000 的偶数还是 000 的问题了。
因为除了我们枚举的该位必须不存在的其他字符 都必须为奇数,所以至少存在,对应拼接的是 000 还是大于 000 的偶数就无所谓了。
可以直接采取1.做法,不过需要在每次计算后清除贡献。(如果不清除,影响可以参考2.)。

代码

#include 
#include 
#include 
using namespace std;
#define ll long long
const int N = 2e5 + 10, M = 1 << 26;
const int K = (1 << 26) - 1;//长度为26的全1二进制数
string s[N];
int t[N], val[M];//t[i]:转化后二进制数 val[i]:计数
vectorg[26];//g[i]:没有字符i的字符串的下标
int main()
{ios::sync_with_stdio(false);cout.tie(NULL);int n;cin >> n;for(int i = 1; i <= n; i ++){cin >> s[i];int len = s[i].length();int vis[30] = {0};for(int j = 0; j < len; j ++){vis[s[i][j] - 'a'] ++;}int num = 0;for(int j = 0; j < 26; j ++){if(vis[j] & 1) num += (1 << j);if(!vis[j]) g[j].push_back(i);}t[i] = num;}ll ans = 0;for(int i = 0; i < 26; i ++){//枚举没有i字符的字符串,只有都没有某个字符的字符串才能匹配for(int id : g[i]){val[t[id]] ++;int v = t[id] ^ K ^ (1 << i);//能与si拼接的字符串所代表的二进制数ans += val[v];}for(int id : g[i]) val[t[id]] --;//清除贡献}cout << ans;return 0;
}

相关内容

热门资讯

通达信如何看美元指数 通达信如何看美元指数一、先查看公式公式名称:CYQKL公式描述:博弈K线长度公式具体:KL:100*...
都说土豆不是蔬菜,如果用土豆代... 都说土豆不是蔬菜,如果用土豆代替米饭做主食能减肥吗?都说土豆不是蔬菜,如果用土豆代替米饭做主食的话,...
有些事情我只猜对了前面结局却没... 有些事情我只猜对了前面结局却没有猜到是什么意思 ?那是你没有看清,跟你打个比方吧!好理解,比如一个人...
郑州荥阳市一小区被外卖骑手“孤... 郑州荥阳市一小区被外卖骑手“孤立”,外卖小哥与业主之间产生了哪些矛盾?肯定是由于外卖小哥的服务态度不...
考古 探险 考古 探险江苏镇江附近有什么适合的地方吗wu````````````````
浓浓药香里 和美乡村入画来 转自:河北新闻网全国文明村镇安国市北段村乡瓦子里村——浓浓药香里 和美乡村入画来游客畅游药博园花海。...
4400mAh:三星 Gala...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! IT之家 7 月 1...
人工智能领域国际(地区)合作研... 转自:钦州发布原标题:人工智能领域国际(地区)合作研究与交流合作项目研讨会在钦举行钱锋作主题报告 刘...
近200名实习生转正!上海迪士... 转自:上观新闻毕业季的华特迪士尼大剧院里,近200名毕业生接过了特殊的“毕业证书”——他们从上海迪士...
第一观察|“多样文明是世界的本... 转自:北京日报客户端“多样文明是世界的本色。”7月10日,习近平主席在致全球文明对话部长级会议的贺信...