Yet Another Sigma Problem

作者:@什么时候才能不困
本文为作者原创,转载请注明出处:https://www.cnblogs.com/haggard/p/18285964


题目传送门

题目

跳转看吧

题解

哈希,字典树

对字符串的前缀进行哈希处理,转换为数字,用 map ,然后为了避免重复,可以将每一种公共字符串前缀的权重都设置为1

例如:

a , ab , aba 权重都为1,因为 ab 是2,但是有一种包含在 a 里面,同理, &aba& 是3,但是被 &ab& , &a& 包含,所以每个公共的前缀权重为1;

代码如下:

点击查看代码

#include<bits/stdc++.h>

using namespace std;
#define ll long long
int base = 131;
int mod[] = { 1000000007, 998244353 };
map<pair<int, int>,int>H;

int main()
{
	int n;
	cin >> n;
	ll ans = 0;
	for (int i = 0; i < n; i++)
	{
		string s;
		cin >> s;
		ll hs[] = { 0,0 };//
		for (int j = 0; j < s.length(); j++)
		{
			hs[0] = (hs[0] * base % mod[0] + s[j]) % mod[0];
			hs[1] = (hs[1] * base % mod[1] + s[j]) % mod[1];
			ans += H[make_pair(hs[0], hs[1])];
			H[make_pair(hs[0], hs[1])]++;
		}
	}
	cout << ans << endl;
}

完结,撒花

posted @   什么时候才能不困  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
// /* */
点击右上角即可分享
微信分享提示