当前位置: 首页>>代码示例>>C++>>正文


C++ Answer::normalize方法代码示例

本文整理汇总了C++中Answer::normalize方法的典型用法代码示例。如果您正苦于以下问题:C++ Answer::normalize方法的具体用法?C++ Answer::normalize怎么用?C++ Answer::normalize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Answer的用法示例。


在下文中一共展示了Answer::normalize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: main

int main() {
	gets(input + 1);
	n = strlen(input + 1);
	pPower[0] = 1ULL;
	for (int i = 1; i <= n; ++i) {
		pPower[i] = pPower[i - 1] * P;
		prefix[i] = prefix[i - 1] * P + input[i];
	}
	for (int i = n; i >= 1; --i) {
		suffix[i] = suffix[i + 1] * P + input[i];
	}
	for (int i = n, j = 1; i >= 1; --i) {
		int length = n - i + 1;
		for (; j <= n && (j < length || hashValue(prefix, j - length, j, length) != hashValue(suffix, n + 1, i, length)); j++);
		earliest[i] = j;
	}
	Answer result;
	result.normalize();
	for (int i = 1; i <= n; ++i) {
		int longest = 1, l = 2, r = min(i, n - i + 1), pos = n + 1;
		while (l <= r) {
			int mid = l + r >> 1;
			if (hashValue(prefix, i - mid, i, mid) == hashValue(suffix, i + mid, i, mid))
				longest = mid, l = mid + 1;
			else
				r = mid - 1;
		}
		l = i + longest, r = n;
		while (l <= r) {
			int mid = l + r >> 1;
			if (earliest[mid] <= i - longest)
				pos = mid, r = mid - 1;
			else
				l = mid + 1;
		}
		Answer temp;
		temp.v.push_back(Interval(i - longest + 1, i + longest - 1));
		if (pos <= n) {
			temp.v.push_back(Interval(pos, n));
			temp.v.push_back(Interval(earliest[pos] - (n - pos), earliest[pos]));
		}
		temp.normalize();
		update(result, temp);
	}
	printf("%d\n", (int)result.v.size());
	for (int i = 0; i < (int)result.v.size(); ++i)
		printf("%d %d\n", result.v[i].first, result.v[i].second - result.v[i].first + 1);
}
开发者ID:roosephu,项目名称:hw-I,代码行数:48,代码来源:30E.cpp


注:本文中的Answer::normalize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。