2017CCPC网赛1004(HDU 6153)

本文介绍了一种利用KMP算法和后缀数组解决字符串匹配问题的方法,通过优化后的KMP算法与后缀数组特性相结合,有效地计算了特定字符串后缀在另一字符串中的出现次数。

题意:给你两个字符串  求第二个字符串的后缀在第一个字符串中出现的次数;

题解:比赛的时候全懵逼,各种奇葩思路,后缀数组优化KMP什么的,最后结束比赛才在学长的指导下,知道了用KMP的性质和后缀数组的特性去解题,直接A掉

#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cstring>
#define N 1000005
#define mod 1000000007
using namespace std;
char a[N];
char b[N];
char c[N];
int Next[N]; 
int first[N];
int aa[N];
void intex(char a[],int Next[],int e){
	int i=0;int j=-1;
	Next[0]=-1;
	while(i<e){
		if(j==-1||a[i]==a[j])  Next[++i]=++j;
		else j=Next[j];
	}
	return ;
}
void kmp(char a[],char c[],int Next[],int e,int w){
	int i=0;int j=0;
	while(i<e){
		if(j==-1||a[i]==c[j]){
			if(j!=-1)  first[j]++;
			i++;j++;
			if(j==w)  j=Next[j];
		}
		else{
		   j=Next[j];
		}
	}
 	return ;
}
int main(){
	int T;
	scanf("%d",&T);
	getchar();
	while(T--){
	   memset(a,0,sizeof(a));
	   memset(b,0,sizeof(b));
	   memset(c,0,sizeof(c));
	   scanf("%s %s",a,b);
	   int len=strlen(b);
	   for(int i=0;i<len;i++)  c[i]=b[len-i-1];
	   memset(b,0,sizeof(b));
	   memset(first,0,sizeof(first));
	   intex(c,Next,len);
	   int len1=strlen(a);
	   for(int i=0;i<len1;i++)  b[i]=a[len1-i-1];
	   kmp(b,c,Next,len1,len);
	   for(int i=len;i>0;i--){
	   	  first[Next[i]-1]+=first[i-1];
	   }
	   long long ans=0;
       for(int i=0;i<len;i++)
       ans=(ans+1ll*first[i]*(i+1)%mod)%mod;
       printf("%lld\n",ans);
	}
	return 0;
} 


【完美复现】面向配电韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电应对突发事件的能力;③为移动储能系统在智能配电中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
### CCPC 2020 题目及竞内容 #### 事概述 CCPC(Chinese Collegiate Programming Contest),即中国大学生程序设计竞,是中国最具影响力的高校编程事之一。2020年的CCPC系列比涵盖了多个分站以及络选拔等内容。以下是关于CCPC 2020的相关题目和竞的具体信息。 --- #### 络选拔络选拔中,参者可以通过在线平台参与挑战。其中一道典型题目为 **1005 Lunch**[^3]。该题涉及动态规划与优化技巧的应用,其核心在于如何通过预处理降低计算复杂度至 \(O(TnK\log n)\)[^3],从而满足大规模输入的要求。 对于此类问题,通常需要关注以下几个方面: - 输入规模的约束条件。 - 如何利用前缀和或其他数据结构加速查询操作。 - 时间复杂度分析及其改进方法。 ```python def solve_lunch(n, k, items): dp = [[float('inf')] * (k + 1) for _ in range(n + 1)] dp[0][0] = 0 for i in range(1, n + 1): weight, value = items[i - 1] for j in range(k + 1): if j >= value: dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - value] + weight) else: dp[i][j] = dp[i - 1][j] return min(dp[n][j] for j in range(k + 1)) # 示例调用 items = [(1, 2), (2, 4), (3, 6)] # 权重和价值 print(solve_lunch(len(items), 7, items)) ``` --- #### 分站 2020年CCPC分站覆盖了多个城市站点,具体如下: | 地点 | 平台 | |------------|--------------| | 秦皇岛 | HDU | | 威海 | Gym | | 广州 | Gym | | 桂林 | Gym | 以桂林站为例,在比中有一道经典题目涉及到矩阵运算极限求解。给定两个矩阵 \(A\) 和 \(K'\),目标是找到当 \(t \to \infty\) 时 \(C^t(A, K')\) 的稳定状态[^2]。这类问题往往依赖于线性代数中的特征值分解理论来简化无穷次幂运算过程。 --- #### 总决 总决作为年度最高水平对决舞台,吸引了全国顶尖队伍参加。尽管官方未公开全部试题资料,但从以往经验来看,总决常包含但不限于以下几类主题: - 图论高级应用:如最小割模型构建、最大流算法实现等。 - 字符串匹配技术:AC自动机、后缀数组等相关知识点考察频繁。 - 数学推理能力测试:组合计数公式推导或者概率统计场景模拟等问题层出不穷。 值得注意的是,在某些特定情况下可能会存在边界情况特殊处理需求,比如某选手提到自己曾因忽视全为\(1\)的情况而导致错误解答被发现并修正[^4]。 --- ### 结语 综上所述,无论是从基础概念理解还是实际编码实践角度出发,深入研究历年真题都是提升竞技实力的有效途径之一。希望以上整理能够帮助到正在备战的同学! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值