求助
  • 板块灌水区
  • 楼主Samuel_YHL
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/22 20:46
  • 上次更新2023/11/4 02:49:58
查看原帖
求助
122000
Samuel_YHL楼主2021/10/22 20:46
#include <set>
#include <string>
#include <unordered_map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define File(_) freopen(#_".in", "r", stdin);freopen(#_".out", "w", stdout)
#define Debug(_) freopen(#_".in", "r", stdin);freopen("debug.out", "w", stdout)
#define fo(i, a, b) for (int i = a; i <= b; ++i)
#define fd(i, a, b) for (int i = a; i >= b; --i)
#define init(a, b) memset(a, b, sizeof a)
#define gc getchar()
#define N 100010
#define mod1 1000000007
#define mod2 1000000009
#define inf 0x3f3f3f3f
#define db double
#define ll long long
using namespace std;
char s[N];
int cnt, num[500], bz[N], qs1[N], qs2[N], sum1[N], sum2[N], pw1[N], pw2[N];
unordered_map <pair<int, int>, pair<int, int> > mp;
int main()
{
	File(language);
	int n, q;
	scanf("%s", s + 1);
	n = strlen(s + 1);
	scanf("%d", &q);
	pw1[0] = pw2[0] = 1;
	fo (i, 1, n)
	{
		pw1[i] = pw1[i - 1] * 31 % mod1;
		pw2[i] = pw2[i - 1] * 29 % mod2;
	}
	fo (i, 1, q)
	{
		string ea;
		cin >> ea;
		int lim = ea.size();
		fo (j, 0, lim - 1)
		{
			qs1[i] = (qs1[i] * 31 % mod1 + ea[i] - 'a' + 1) % mod1;
			qs2[i] = (qs2[i] * 29 % mod2 + ea[i] - 'a' + 1) % mod2;
		}
		mp[make_pair(qs1[i], qs2[i])].first = 1;
	}
	fo (i, 1, n)
	{
		sum1[i] = (sum1[i - 1] * 31 % mod1 + s[i] - 'a' + 1) % mod1;
		sum2[i] = (sum2[i - 1] * 29 % mod2 + s[i] - 'a' + 1) % mod2;
		fo (j, 1, cnt)
			if (num[j] <= i)
			{
				pair <int, int> mos = make_pair(sum1[i] - sum1[i - num[j]] * pw1[num[j]] % mod1, sum2[i] - sum2[i - num[j]] * pw2[num[j]] % mod2);
				if (mp[mos].first && mp[mos].second <= i - num[j])
				{
					++mp[mos].first;
					mp[mos].second = i;
				}
			}
	}
	fo (i, 1, q)
		printf("%d\n", mp[make_pair(qs1[i], qs2[i])].first - 1);
	return 0;
}

用unordered_map做双哈希,编译过不去,求助大佬是什么原因

2021/10/22 20:46
加载中...