【POJ 2774】Long Long Message 最长公共子串

本文深入探讨了一种高效的字符串匹配算法,通过使用特定的数据结构和排序技巧来加速字符串的比较过程。该算法首先对输入字符串进行预处理,创建辅助数组并进行排序,然后计算每个位置的最长公共前缀长度,最后通过比较特定条件下的高度值来确定最大匹配长度。文章提供了详细的代码实现,包括初始化数组、排序、计算排名和高度等关键步骤。

还是模板啊,手残&&打成||查错查了1h+TAT

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N = 2000003;

int t1[N], t2[N], c[N];
void st(int *x, int *y, int *sa, int n, int m) {
	int i;
	for(i = 0; i < m; ++i) c[i] = 0;
	for(i = 0; i < n; ++i) ++c[x[y[i]]];
	for(i = 1; i < m; ++i) c[i] += c[i - 1];
	for(i = n - 1; i >= 0; --i) sa[--c[x[y[i]]]] = y[i];
}
void mkhz(int *a, int *sa, int n, int m) {
	int i, j, p, *t, *x = t1, *y = t2;
	for(i = 0; i < n; ++i) x[i] = a[i], y[i] = i;
	st(x, y, sa, n, m);
	for(p = 1, j = 1; p < n; j <<= 1, m = p) {
		for(p = 0, i = n - j; i < n; ++i) y[p++] = i;
		for(i = 0; i < n; ++i) if (sa[i] >= j) y[p++] = sa[i] - j;
		st(x, y, sa, n, m);
		for(t = x, x = y, y = t, p = 1, x[sa[0]] = 0, i = 1; i < n; ++i)
			x[sa[i]] = y[sa[i]] == y[sa[i - 1]] && y[sa[i] + j] == y[sa[i - 1] + j] ? p - 1 : p++;
	}
}
void mkh(int *r, int *sa, int *rank, int *h, int n) {
	int i, j, k = 0;
	for(i = 1; i <= n; ++i) rank[sa[i]] = i;
	for(i = 1; i <= n; h[rank[i++]] = k)
		for(k ? --k : 0, j = sa[rank[i] - 1]; r[i + k] == r[j + k]; ++k);
}

char s[N];
int a[N], sa[N], h[N], rank[N], n;
int main() {
	while(~scanf("%s", s + 1)) {
		int tmp = strlen(s + 1);
		s[tmp + 1] = '$';
		scanf("%s", s + tmp + 2);
		int n = strlen(s + 1);
		for(int i = 1; i <= n; ++i) a[i] = s[i];
		mkhz(a, sa, n + 1, 130);
		mkh(a, sa, rank, h, n);
		int ans = 0;
		++tmp;
		for(int i = 2; i <= n; ++i)
			if (((tmp < sa[i - 1] && tmp > sa[i]) || (tmp < sa[i] && tmp > sa[i - 1])) && h[i] > ans)
				ans = h[i];
		printf("%d\n", ans);
	}
	return 0;
}

Orz

转载于:https://www.cnblogs.com/abclzr/p/5418374.html

内容概要:本文介绍了一个基于Python的地理空间分析自动化流程,旨在利用Google Earth Engine(GEE)获取森林分类遥感数据,并结合GIS技术对特定不动产区域内的森林类型进行可视化与面积统计。系统通过加载不动产矢量边界(AOI),从GEE平台调用NASA/ORNL发布的全球森林分类数据集(2020年版),裁剪并下载对应区域的栅格数据,随后在本地进行像素级分类统计,计算各类森林(原始林、年轻次生林、老年次生林)的覆盖面积(单位:公顷)。同时,程序生成标准化的地图可视化结果,包含底图、图例、比例尺、指北针和智能经纬网格,并最终导出包含图表和统计表格的PDF报告。整个流程实现了从云端数据获取到本地制图输出的一体化处理。; 适合人群:具备Python编程基础及地理信息系统(GIS)知识的科研人员、环境监测从业者或遥感技术人员,尤其适合从事生态评估、土地利用分析等相关工作的专业人士;; 使用场景及目标:① 实现对指定区域森林类型的自动分类与面积量化;② 生成符合出版标准的空间地图与分析报告,支持环境保护、碳汇评估或政策制定等应用;③ 提供可复用的自动化管道,减少重复性人工操作; 阅读建议:此资源以面向对象方式组织代码,结构清晰,建议使用者熟悉geemap、rasterio、geopandas等库的基本用法,并确保已配置GEE开发环境。学习时应重点关注类间的协作关系、坐标系处理逻辑以及地图美化细节,便于根据实际需求扩展分类体系或调整输出样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值