hdu5384 Danganronpa(ac自动机+处理源字符串总容量超过二维数组容量的技巧(连接+分割))

ADS与MATLAB数据互通全指南:从Snp文件导入到TXT导出完整流程 本文详细介绍了在射频与微波工程中,实现ADS与MATLAB高效数据互通的完整流程。核心内容包括利用SPOutput控件、数据显示窗口及测量方程等多种方法,将ADS仿真数据(如S参数)导出为Touchstone或TXT格式,并导入MATLAB进行深度分析与可视化;同时指导如何将MATLAB处理后的数据回灌至ADS,用于模型验证与协同仿真,旨在构建自动化、无损的数据交换工作流,提升工程师的工作效率。 阅读详情

Link:http://acm.hdu.edu.cn/showproblem.php?pid=5384


Danganronpa

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 607    Accepted Submission(s): 332


Problem Description
Danganronpa is a video game franchise created and developed by Spike Chunsoft, the series' name is compounded from the Japanese words for "bullet" (dangan) and "refutation" (ronpa).

Now, Stilwell is playing this game. There are  n  verbal evidences, and Stilwell has  m  "bullets". Stilwell will use these bullets to shoot every verbal evidence.

Verbal evidences will be described as some strings  Ai , and bullets are some strings  Bj . The damage to verbal evidence  Ai  from the bullet  Bj  is  f(Ai,Bj) .
f(A,B)=∑i=1|A|−|B|+1[ A[i...i+|B|−1]=B ]
In other words,  f(A,B)  is equal to the times that string  B  appears as a substring in string  A .
For example:  f(ababa,ab)=2 ,  f(ccccc,cc)=4

Stilwell wants to calculate the total damage of each verbal evidence  Ai  after shooting all  m  bullets  Bj , in other words is  ∑mj=1f(Ai,Bj) .
 

Input
The first line of the input contains a single number  T , the number of test cases.
For each test case, the first line contains two integers  n ,  m .
Next  n  lines, each line contains a string  Ai , describing a verbal evidence.
Next  m  lines, each line contains a string  Bj , describing a bullet.

T≤10
For each test case,  n,m≤105 ,  1≤|Ai|,|Bj|≤104 ,  ∑|Ai|≤105 ,  ∑|Bj|≤105
For all test case,  ∑|Ai|≤6∗105 ,  ∑|Bj|≤6∗105 ,  Ai  and  Bj  consist of only lowercase English letters
 

Output
For each test case, output  n  lines, each line contains a integer describing the total damage of  Ai  from all  m  bullets,  ∑mj=1f(Ai,Bj) .
 

Sample Input
  
1 5 6 orz sto kirigiri danganronpa ooooo o kyouko dangan ronpa ooooo ooooo
 

Sample Output
  
1 1 0 3 7
 

Author
SXYZ
 

Source
 

题意:先给你n个源字符串,再给你m个模式串,问对于每个源字符串,其所包含的总的模式串数目。(模式串可以重复出现)

AC code:
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath>
#define LL long long
#define MAXN 2000010 
using namespace std;
char str[600010];//源串 
char p[500010];//模式串(即病毒)
struct Trie
{
	int next[500010][26];//有128个可显字符(若题目给的只有小写字母,128可能会暴),还有,注意第一个下标容量大小!!!
	//防止MLE或RE(access_violation),下面开的数组大小类似上面的数组第一个下标容量大小,
	//第一个下标表示字典树最大结点数,也就是允许的最大总的字符总数 
	int fail[500010];//失配指针  
	int end[500010];//记录数组,若要输出出现模式串的id,用end记录id
	int count[500010];//计数器 
	
	int root;//根结点指针 
	int L;//总长度
	int NewNode() //获取新结点并初始化  
	{
		for(int i=0;i<26;i++)
		{
			next[L][i]=-1;
		}
		end[L]=-1;
		count[L]=0;
		return L++;
	}
	void init() //初始化
	{
		L=0;
		root=NewNode();
	}
	void Insert(char *s,int id)
	{
		int len=strlen(s);
		int j=root;
		for(int i=0;i<len;i++)
		{
			if(next[j][s[i]-'a']==-1)//不存在该结点
			{
				next[j][s[i]-'a']=NewNode();
			}
			j=next[j][s[i]-'a'];
		}
		end[j]=id;//记录其id  
		count[j]++;
	}
	void build()
	{
		queue<int>q;
		fail[root]=root;//根结点失配指针指向自己  
		//根结点的孩子入队,其失配指针指向自己
		for(int i=0;i<26;i++)
		{
			if(next[root][i]==-1)//不存在该孩子 
			{
				next[root][i]=root;//指向自己
			}
			else
			{
				fail[next[root][i]]=root;//失配指针指向自己  
				q.push(next[root][i]); //孩子入队  
			}
		}
		int j;
		while(!q.empty())
		{
			j=q.front();
			q.pop();
			for(int i=0;i<26;i++)
			{
				if(next[j][i]==-1)//不存在该孩子,指向其父结点失配指针所指向的结点(该结点也有孩子i)  
				{
					next[j][i]=next[fail[j]][i];
				}
				else
				{
					fail[next[j][i]]=next[fail[j]][i];
					q.push(next[j][i]);
				}
			}
		}
	}
//	bool used[600010];//记录数组  
	int query(char *str,int n,int id)
	{
		int len=strlen(str);
		int j=root;
		int temp;
	//	int num[100010];////num[i]表示病毒i的出现次数
	//	memset(num,0,sizeof(num));//每个病毒出现次数
		int ans1=0;//how many keywords will be match,即求目标串中出现了几个模式串(同一个模式串允许在源串的不同位置重复出现,出现一次,次数累加一次) 
		int ans2=0;//出现的模式串个数(同一个模式串不允许在源串的不同位置重复出现,即使出现多次,次数只算一次)  
	//	memset(used,false,sizeof(used));
		for(int i=0;i<len;i++)
		{
			j=next[j][str[i]-'a'];
			temp=j;
			while(temp!=root)
			{
				ans1+=count[temp];
				//count[temp]=0;模板对于这题,这句代码要注释掉才是对的,不过具体原因我暂时还不清楚,有谁知道了请告诉我一下,谢谢!
				if(end[temp]!=-1)//该单词或字符在Trie中出现了 
				{
				//	used[end[temp]]=true;//记录
					ans2++;
				//	num[end[temp]]++;
				}
				temp=fail[temp];//继续找后缀串
			}
		}
		/*if(ans2>0)//按字典序输出已出现过的模式串 
		{
		//	printf("web %d:",id);
			for(int i=1;i<=n;i++)
			{
				if(used[i])
					printf("%s: %d\n",p[i],num[i]);
			}
		}*/
		//return ans1;//返回目标串中出现的模式串个数(出现多次,次数累加算) 
		return ans1;//返回目标串中已出现过的模式串个数(出现多次,次数只算一次)
	}
};
Trie ac;
char temp[100010];
int main()
{
	//freopen("D:\in.txt","r",stdin);
    int n,m,tot,t,i,j,len,id,idx;
    scanf("%d",&t);
    while(t--)
    {
    	scanf("%d%d",&n,&m);
    	memset(str,0,sizeof(str)); //注意:这里每次都有清空,清空不能用str[0]='\0',否则WA!!! 
    	for(i=1;i<=n;i++)
    	{	
    		scanf("%s",temp);
    		strcat(str,temp);//连接源字符串 
    		len=strlen(str);
    		str[len]=' ';
		}
    	ac.init();
    	for(i=1;i<=m;i++)
    	{
    		scanf("%s",p);
    		ac.Insert(p,i);
		}
		ac.build();
		id=1;
		idx=0;
		for(i=0;i<=len;i++)//分割源字符串 
		{
			if(str[i]==' ')
			{
				temp[idx]='\0';
				//puts(temp);
				printf("%d\n",ac.query(temp,m,id));
				id++;
				idx=0;
			}
			else
			{
				temp[idx++]=str[i];
			}
		}
	}
    return 0;
}



包成功安装tiny-cuda-nn,记录安装过程中的问题解决,附带pytorch3d安装【踩坑指南】 该包可以显著提高NeRF训练速度,是和NeRFstudio等框架中,必须使用的。本文提供tiny-cuda-nn可以安装的完整包的下载链接,可以直接上传到项目中安装。附带笔者遇到的问题的解决方案。 阅读详情

相关推荐

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 567

hdu5384 Danganronpa(AC自动机)

题目: Danganronpa Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 827    Accepted Submission(s): 443 Problem Description Danganronpa

hexiecs的技术专栏 855

用R语言实现“中断时间序列分析” --- R code for ITS

ITS方法可用于评估一项干预措施的效果,从水平改变和斜率改变两个角度来描述干预引起的变化。

franksui的博客 4026

Danganronpa

Danganronpa . . 这是一道水题,主要是题目描述不清楚。 题意是有一个老师要准备n种礼物,每种礼物有ai个,老师要把这些礼物放到很多个小孩子的座位上,要连续摆放,每个座位放两种礼物,分为普通礼物和神秘礼物,问最多多少个孩子能够满足和他相邻座位的普通礼物不相同。 . . 解法:假设礼物总数为sum,人数不会超过sum/2,然后直接枚举放普通礼物就好,神秘礼物不用管,看最多能放

lzh的博客 360

两轮差速机器人运动学模型

两轮差速底盘 1.1、底盘说明 两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速度,通过给定不同速度实现底盘转向控制。一般会配有一到两个辅助支撑的万向轮。 主要底盘有: 1、Turtlebot; 2、扫地机器人; 3、无人仓AGV小车; 4、轮椅; 底盘主要特点: 1、控制简单、里程计计算简单。 2、只能给定X方向速度、Z轴方向角速度。 1.2、底盘运动学分析 1.2.1、底盘模型 图1.2.1 常见的两轮差速底盘模型 1.2.2、机器人本身约束方程(物理特性) 图1.2.2 a 左侧是车的两个

su_fei_ma_su的博客 3万+

RK3568 Android12预置APK的三种模式详解:不可卸载、可卸载与永久删除

本文深入解析RK3568 Android12系统中APK预置的三种模式:不可卸载、可卸载与永久删除,详细介绍了每种模式的技术实现、应用场景及实战案例。针对Rockchip平台特性,提供从目录创建到系统编译的完整指南,帮助开发者根据产品需求选择最佳预置方案,并解决常见问题。

k8s6orchestrator的博客 967

HDU 5835 Danganronpa

原题: Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of nn kinds with a[i]a[i] quantities of each kind, for her students and wants to hold a class meeti

Lllll_sh的博客 255

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

浅析AC自动机

前置知识 KMP算法 字典树Trie 其实会了也不一定懂,但不会一定不懂 简介 AC自动机是在以字典树为基础的数据结构下,结合  KMP  \;KMP\;KMP算法的思想所建立的一种更为高级的数据结构说不说这句话其实没区别,常用于多模式串的匹配,通过引入一个  fail  \;fail\;fail指针来减少匹配的回溯次数,更高效的进行匹配。 实现 首先最根本的就是先要由多个模式串建立起字典树,然后...

南判° 253

【QT开发教程】QMatrix4x4类详解及实战应用:Qt中的4x4矩阵变换

在计算机图形学和三维图形应用中,矩阵变换是一个核心概念。Qt框架提供了QMatrix4x4类,用于处理4x4矩阵变换,帮助开发者在三维空间中进行复杂的几何计算。本文将深入探讨QMatrix4x4的功能及其在Qt应用中的实际应用。

科技改变人类,技术成就未来 715

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码

大疆psdk开发环境

哒宰的博客 1442

D - Danganronpa

Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of nn kinds with a[i]a[i] quantities of each kind, for her students and wants to hold a class meeting. Because o...

CHEN_ZAN_YU的博客 412

【26美赛E题 Passive Solar Shading】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文研究了被动太阳能遮阳(PSS)策略在建筑节能中的应用,针对Sungrove大学(低纬高温)和Borealis大学(高纬寒冷)两种典型气候条件,建立了动态太阳辐射-热平衡模型。通过优化遮阳结构(外檐长度、百叶角度)、窗户布局和内部热质量分布,实现了夏季制冷负荷降低30-40%(Sungrove)和冬季采暖负荷减少15-25%(Borealis)。创新性地采用全天候动态遮阳建模方法,结合热质量优化与储能设计,提出了可适应不同气候条件的建筑节能解决方案,为未来可持续建筑设计提供了量化框架。

一键难忘的博客 947

HDU 5835 Danganronpa(贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=5835Problem Description Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of n kinds with a[i] quantities of each kind,

我要加油了,因为我还有很多NB的梦想! 652

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IP地址(简单模拟)

链接:https://www.nowcoder.com/practice/2359e23180194f99828f5cd9c764236a?tpId=40&tqId=21538&tPage=11&rp=11&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking 来源:牛客网 题目描述 输入一个ip地址串,判断是否合法。  输入描述: 输入的第

林下的码路 7984

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

算法训练 s01串 (简单递归)

Link:http://lx.lanqiao.org/problem.page?gpid=T366  算法训练 s01串   时间限制:1.0s   内存限制:256.0MB 问题描述   s01串初始为"0"   按以下方式变换   0变1,1变01 输入格式   1个整数(0~19) 输出格式   n次

林下的码路 3705

字符串的反码

Problem Link:点击打开链接 题目描述     一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。如果这是一个小写字符,则它和字符'a’的距离与它的反码和字符'z’的距离相同;如果是一个大写字符,则它和字符'A’的距离与它的反码和字符'Z’的距离相同;如果不是上面两种情况,它的反码就是它自身。     举几个例子,'a’的反码是

林下的码路 3453

搜狗输入法的分词算法

搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k” 是标记进制为15的前缀标记,之后的部分 “1234567” 是实际的十五进制的数字串。 在发现这一标记模式后,搜狗的工程师开始尝试在已有的分词算法上进一步加入对于十五进制数字串的处理,把网页上的这种形式的 15 进制数正确

林下的码路 3204

首字母大写(有坑点)

Problem Link:点击打开链接 题目描述 对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。  输入描述: 输入一行:待处理的字符串(长度小于100)。 输出描述: 可能有多组测试数据,对于

林下的码路 2327

2013年福建省赛ACM题目

Link:http://acm.fzu.edu.cn/problem.php?pid=2146

林下的码路 1949

蓝桥杯基础练习 高精度加法 (简单模拟)

Link:http://lx.lanqiao.org/problem.page?gpid=T70 基础练习 高精度加法   时间限制:1.0s   内存限制:512.0MB 问题描述   输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述   由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题

林下的码路 1944

KMP算法模板

#include #include char p[1111111],t[1111111]; int next[1111111],lenp,lent; void get() { int i,j; i=0; next[i]=-1; j=-1; while(i { if(j==-1||p[i]==p[j]) { i++; j++; next[i]=j; } else

林下的码路 1773

破解密码(原题目:The Hardest Problem Ever)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1048

林下的码路 1746

算法训练 字串统计 (暴力+模拟+排序)

Link:http://lx.lanqiao.org/problem.page?gpid=T219 问题描述   给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。 输入格式   第一行一个数字L。   第二行是字符串S。   L大于0,且不

林下的码路 1733

蓝桥杯基础练习 报时助手

Link:http://lx.lanqiao.org/problem.page?gpid=T67   基础练习 报时助手   时间限制:1.0s   内存限制:512.0MB 问题描述   给定当前的时间,请用英文的读法将它读出来。   时间用时h和分m表示,在英文的读法中,读一个时间的方法是:   如果m为0,则将时读出来,然后加上“o'clock

林下的码路 1678

String painter(DP综合题:区间DP(两次DP))

Link:http://acm.hdu.edu.cn/showproblem.php?pid=2476 String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2543    Accep

林下的码路 1643
上一篇: Zball in Tina Town(数论规律题+特判+较大数判是否为素数的正确姿势)
下一篇: hdu5386 Cover(逆向思维+模拟)
林下的码路
博客等级 码龄12年 295粉丝 506原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林下的码路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值