2021杭电多校第三场 1003——Forgiving Matching

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战 本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。 阅读详情

题目大意

给你两个字符串,一个长度为 nnn 模式串,一个长度为 mmm 匹配串,由字符 000 到 999 和 通配符 * 组成。问你匹配串在模式串中失配长度不超过 0,1,⋯ ,m0, 1,\cdots,m0,1,⋯,m 的字符串一共有多少个。

解题思路

考虑采用 fftfftfft 来做。
预处理
对于模式串,我们开十个数组(桶),来标记 000 到 999 出现的下标,如果出现了就标为 111,否则标为 000,对于通配符 ∗*∗ ,将 000 到 999 都标为 111,因为通配符是可以和任何字符匹配的,都能造成贡献。
对于匹配串,首先将匹配串反转,然后和模式串做同样的处理,唯一不同的就是通配符的处理。模式串中的通配符不能将所有位置都标记为 111,这样的话,如果模式串和匹配串都是通配符会重复计算,所以我们首先统计匹配串中通配符的个数,将通配符的所有位置都标为 000,最后统计答案的时候加上通配符的个数即可。
对于样例
012∗4012*4012∗4
1∗31*31∗3
模式串预处理的结果为

10010
01010
00110
00010
00011
00000
00000
00000
00000
00000

用 fftfftfft 快速处理
定义模式串中的第 iii 个串为,以第 iii 个字符开头,长度为 mmm 的连续子串。(iii 从 000 开始)
用模式串中的 000 数组与匹配串中的 000 数组做 fftfftfft 可以得到 fftfftfft 之后的数组 aaa。其中 am−i−1a_{m-i-1}am−i−1​ 即为模式串的第 iii 个串与匹配串中 000 匹配的个数。
我们对 000 到 999 每个数组做一次 fftfftfft ,然后对每一次求和一下 am−i−1a_{m-i-1}am−i−1​,再加上匹配串中通配符的个数,就可得到第 iii 个模式串和匹配串最大匹配长度。

求答案
最后我们统计一个失配为 000 到失配为 mmm 的前缀和即可。

反转操作很重要
比如你想知道 a1,a2,a3a_1, a_2, a_3a1​,a2​,a3​ 和 b1,b2,b3b_1,b_2,b_3b1​,b2​,b3​有多少个是匹配的,你不反转第二个字符串,你的结果会存在 c2,c4,c6c_2, c_4, c_6c2​,c4​,c6​ 之中,因为 c2=a1×b1,c4=a2×b2,c6=a3×b3c_2 = a_1\times b_1, c_4=a_2\times b_2, c_6 = a_3\times b_3c2​=a1​×b1​,c4​=a2​×b2​,c6​=a3​×b3​,但是反转之后结果就直接存在 c4c_4c4​ 之中, 因为 c4=a1×b3+a2×b2+a3×b1c_4 = a_1\times b_3 + a_2\times b_2 + a_3\times b_1c4​=a1​×b3​+a2​×b2​+a3​×b1​,这样才是我们 fftfftfft 的意义所在。

Code

#include <bits/stdc++.h>
#define ll long long
#define qc ios::sync_with_stdio(false); cin.tie(0);cout.tie(0)
#define fi first
#define se second
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define pb push_back
using namespace std;
const int MAXN = 1e6 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9 + 7;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
char s[MAXN],t[MAXN];
int f[10][MAXN];
int g[10][MAXN];
int n, m;
const double PI = acos(-1.0);
struct Complex
{
    double x, y;
    Complex operator+(const Complex &W) const
    {
        return {x + W.x, y + W.y};
    }
    Complex operator-(const Complex &W) const
    {
        return {x - W.x, y - W.y};
    }
    Complex operator*(const Complex &W) const
    {
        return {x * W.x - y * W.y, x * W.y + y * W.x};
    }
};
Complex a[MAXN], b[MAXN];
int R[MAXN];
int tot, bit;
void inif(int n)
{
    tot = 1, bit = 0;
    while (tot <= n)
        tot <<= 1, ++bit;
    for (int i = 0; i <= tot; ++i)
        R[i] = (R[i >> 1] >> 1) | ((i & 1) << (bit - 1));
}
void FFT(Complex f[], int total, int type, int n, int m)
{
    for (int i = 0; i < total; ++i)
        if (i < R[i])
            swap(f[i], f[R[i]]);
    for (int tot = 2; tot <= total; tot <<= 1)
    {
        Complex w1 = {cos(2 * PI / tot), type * sin(2 * PI / tot)};
        for (int pos = 0; pos < total; pos += tot)
        {
            Complex w = {1, 0};
            for (int i = pos; i < pos + tot / 2; ++i, w = w * w1)
            {
                Complex x = f[i];
                Complex y = w * f[i + tot / 2];
                f[i] = x + y;
                f[i + tot / 2] = x - y;
            }
        }
    }
    if (type == -1)
    {
        for (int i = 0; i <= n + m; ++i)
            f[i].x = (int)(f[i].x / tot + 0.5);
    }
}

// 用法
int tong[MAXN];
int ans[MAXN];
int pre[MAXN];
void solve(){
    cin >> n >> m;
	cin >> (s) >> (t);
	for (int i = 0; i < n; ++i){
	    if(s[i] == '*'){
			for (int j = 0; j <= 9; ++j){
			    f[j][i] = 1;
			}
		}
		else
			f[s[i]-'0'][i] = 1;
	}
	int cnt = 0;
	reverse(t, t+m);
	for (int i = 0; i < m; ++i){
	    if(t[i] == '*')
			cnt++;
		else
			g[t[i]-'0'][i] = 1;
	}
	for(int i = 0; i <= 9; ++i){
		for (int j = 0; j < n; ++j){
		    a[j].x = f[i][j];
		}
		for (int j = 0; j < m; ++j){
		    b[j].x = g[i][j];
		}
		inif(n + m);
		FFT(a, tot, 1, n, m), FFT(b, tot, 1, n, m);
		for (int j = 0; j <= tot-1; ++j){
		    a[j] = a[j] * b[j];
		}
		FFT(a, tot, -1, n, m);
		// 开始处理
		for (int j = m-1; j <= n-1; ++j){
		    tong[j] += (int)a[j].x;
		}
		for (int j = 0; j <= tot; ++j){
		    a[j].x = a[j].y = b[j].x = b[j].y = 0;
		}
	}
	for (int i = m-1; i <= n-1; ++i){
	    ans[tong[i] + cnt]++;
	}
	pre[m+1] = 0;
	for(int i = m; i >= 0; --i){
		pre[i] = pre[i+1] + ans[i];
	}
	for(int i = m; i >= 0; i--)
		cout << pre[i] << "\n";
	for(int i = m-1; i <= n-1; i++) tong[i] = 0;
	for (int i = 0; i <= m; ++i){
	    ans[i] = 0;
	}
	for (int i = 0; i <= 9; ++i){
	    for (int j = 0; j <= n; ++j){
	        f[i][j] = g[i][j] = 0;
	    }
	}
}

signed main()
{
    #ifdef ONLINE_JUDGE
    #else
       freopen("in.txt", "r", stdin);
       freopen("out.txt", "w", stdout);
    #endif

    qc;
    int T;
    cin >> T;
    //T = 1;
    while(T--){

        solve();
    }
    return 0;
}

YOLOv11的对比学习预训练改进-(通过SimCLR预训练增强特征提取) 本文介绍了将SimCLR对比学习预训练与YOLOv11目标检测模型相结合的创新方法。文章首先概述了目标检测领域的发展现状和YOLOv11的架构优化,包括主干网络、特征金字塔和检测头的改进设计。其次详细解析了SimCLR对比学习的核心原理,涵盖数据增强、投影头设计和NT-Xent损失函数。最后探讨了如何将对比学习与目标检测有效结合,通过特征空间对齐和渐进式微调策略提升模型性能。该方法显著增强了特征提取能力,提高了检测精度和训练效率,特别是在小目标和遮挡目标的检测上表现突出。 阅读详情

相关推荐

华中科技大学 计算机组成原理 educoder Logisim平台 计算机数据表示实验

本文主要是对 计算机数据表示实验的笔记和相关Logisim平台的图,供大家学习交流使用。 需要源文件或者源代码,可以留言评论! 目录实验目的第1关:汉字国标码转区位码实验第2关:汉字机内码获取实验第3关:偶校验编码设计第4关:偶校验解码电路设计第5关:16位海明编码电路设计第6关:16位海明解码电路设计第7关:海明编码流水传输实验第8关:16位CRC并行编解码电路设计第9关:CRC编码流水传输实验实验结果: 实验目的 本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换

weixin_48383580的博客 2万+

HDU - 6975 - Forgiving Matching ( FFT字符串匹配 )

题目链接:点击进入 题目 题意 给你两个字符串 S 、T ( 只包含 字符 0 - 9 以及 * ), S 长 n , T 长 m , * 是通配符( 即可以与任何字符匹配 ),问在匹配中最多允许 k( 0 - m )个不同位置的情况下,S 中最多有多少个能与 T 匹配的子串。 思路 对于 S 的所有长度为 m 的子串,维护一个 f 记录这个子串与 T 匹配的位置数,知道了 f 也就是知道了这个子串完全匹配所需要的最小的 k 。 假如没有通配符,对于每个字符 c ,

Cosmic_Tree的博客 448

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2582

2022杭电多校训练第三场 1009 Package Delivery

贪心题

m0_51171995的博客 392

Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

打开ssh_config此文件,滑动到最下面,新增自己git主机地址(这里我直接默认*)执行命令 git clone git@xxxxxxxxxxxxx.git。代码仓库已经添加了ssh公钥之后,克隆代码到本地时就报了这个问题。首先是找到git安装目录(根据自己安装时选项,找到这个目录)再进入ssh目录,找到 ssh_config 配置文件。配置完成后,保存配置文件后再次去clone代码。直接复制下面这一段到文件中最底部位置即可。然后进入 etc目录,找到ssh目录。终于可以克隆下来了。

萌兔兔MMQ!! 3355

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

杭电多校第三场

杭电多校第三场 1

海边拾贝,沧海一粟 651

得利捷datalogic扫码枪调试说明

针对得利捷datalogic扫码枪快速调试并,可以根据详细步骤设置扫码枪,并配有tcp调试助手辅以验证,以达到快速调试完成扫码枪的工作。

Conway510的博客 1万+

HDU Forgiving Matching

题目链接:Problem - 6975 (hdu.edu.cn) 题意:长度为n的字符串S和长度为m的字符串T匹配(m<n),*号可以充当万能符号,允许小于等于k个字符不相等。 输入格式: 样例数 K(1<=K<=100) S串长度n T串长度m(1<=m<=n<=200 000) S串 T串 输出:第i行表示K=i-1 知识点 FFT字符串匹配 参考:(5条消息) FFT总结及FFT在字符串匹配上的应用_十分残念的博客-优快云博客 和kmp.

asiip的博客 210

第1章 机器人SLAM算法工程师主要做什么的?(附SLAM学习路线及资料推荐)

对于想从事机器人与自动驾驶领域的在校大学生、研究生来说,建图定位算法工程师是一个极具发展潜力的岗位,而SLAM知识体系则是胜任该岗位的核心支撑。从基础的计算机工具、C++语言,到核心的开源框架、数学知识,再到硬件衔接与项目实践,每一个环节都不可或缺。建议大家结合自身兴趣确定侧重方向(如激光SLAM、融合定位),先通过开源项目建立实践认知,再补全理论知识,同时积极参与社区交流。

行知SLAM 953

110、3A 端到端调试:从 ISP register dump 到主观画质的完整调试流程

文章摘要 本文分享了ISP 3A(AE/AWB/AF)端到端调试的实战经验,通过具体案例解析常见问题排查方法。从硬件链路确认、寄存器dump分析、算法闭环验证到主观画质调优,提出了一套系统化调试流程。重点包括:如何通过示波器和寄存器抓包定位时序问题,AWB调试中black level校正的关键作用,AF闭环控制中hall传感器反馈的重要性,以及算法与硬件联调的"三板斧"方法论。作者强调3A调试本质是系统工程,需结合物理层信号测量、数据通路验证和算法状态跟踪,避免陷入局部优化陷阱。

sundong_81的博客 57

2024杭电多校第三场-1001

f [ 3 ] :根据情况1,f [ 3 ] + = f [ 3 - 1 ] ,根据情况2,f [ 3 ] + = 1,而对于情况 3,没法分出来,因为是奇数 , +=0;f [ 4 ] 根据情况 1 ,f [ 4 ] + = f [ 3 ] ,根据情况 2,f [ 4 ] + = 1,根据情况 3,分成2*2。f [ 2 ] :根据情况1, f [ 2 ] + = 1,根据情况 2,f [ 2 ] += 1 , 所以f [ 2 ] = 2;的树,假如有两组这样的树,就能得到总节点为 4 的一片森林。

2302_80236366的博客 2159

大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。

大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。

805

2021 MINIEYE杯 杭电多校3 1003 Forgiving Matching 字符串FFT 1009 Rise in Price 动态规划

原题链接

qq_27873307的博客 358

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题

2021“MINIEYE杯”中国大学生算法设计超级联赛(3) Start Time : 2021-07-27 12:00:00 End Time : 2021-07-27 17:00:00 Contest Type : Private Contest Status : Ended Current Server Time : 2021-07-27 17:31:07 Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 Bookshop 5.37%(

小哈里的博客 1353

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2024杭电多校第三场 —— 1008比特跳跃

证明:假设使用两次比特跳跃,a->b,c->d,那么权值为 k*(a|b+c|d) ,不如直接从a->d,权值为 k*(a|d),因为a|b+c|d >= min(a,b)+min(c,d)>=a+b>=a|d。反证法:若 x|y!= y,则从1跳到y一定比从x跳到y更优。且比特跳跃若从x跳到y一定满足 x|y=y,或者是从1跳到y。由题意可知从点1到点n的最短路径最多使用1次比特跳跃。枚举子集时间复杂度O(2^n) n为二进制的位数。tag:最短路径+枚举子集。

Perfect_Life_的博客 1153

Camera2Demo

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

HDU 6975 Forgiving Matching(FFT加速卷积处理字符串匹配)

题目:Problem - 6975 (dingbacode.com) 题目意思是求在最多容忍k个字符不同的情况下,B串在A串中的匹配位置的数量。A串长度为n,B串长度为m,k取遍0到m。串中还有通配符,可以匹配任意字符。 用卷积处理出匹配的情况。 由于这题字符集较少,可以直接枚举每种字符,考虑单个字符下两串的匹配情况,最后再处理所有字符的结果对答案的贡献。 考虑到这题要容忍k个不同的字符,所以要知道每个位置下的已匹配字符的个数。假设当前...

qq_53333451的博客 303

Forgiving Matching

一、 题目:原题链接 二、题解 : 三、 题解解释: 3.1 FFT:解释的很好 3.2 字符串FFT匹配:看看看 四、代码:

m0_50463885的博客 251

2021杭电多校第三场 赛后总结

2021杭电多校第三场 赛后总结 依旧菜的一 本场过了3题,没进前200。 第一题1011,求线段树节点数量,记忆化搜索0:35一发水过。 第二题1007,队友写的我没碰,1:16 三发A掉。 第三题1004,重点是处理直线斜率,1:31一发A掉。 然后又双叒叕是无限罚坐,剩下的题最后加起来读了6道,都没啥思路。1003和1009是剩下的唯二AC过百的题,愣是半点思路没有。看clarification注意到1009的数据是随机生成,于是写了个巨暴力的假算法,疯狂提交调参,参数小了就WA,大了就TLE,真就手

xiachi00的博客 325

hdu-6975 Forgiving Matching(卷积处理模糊串匹配)

题目链接:点击这里 题目大意: 给出一个长度为 nnn 的字符串 SSS 和一个长度为 mmm 的字符串 TTT 。我们定义 kkk 匹配为两个长度相同的字符串至多有 kkk 个位置不同,求当 k∈[0,m]k \in[0,m]k∈[0,m] 时,TTT 可以和 SSS 中的多少个子串匹配 题目分析: 类似于 P4173 残缺的字符串 的思路。 我们发现字符集很小,所以考虑枚举字符集的元素。 如果 Si=TjS_i=T_jSi​=Tj​ ,那么当前字符在 SSS 中以 i+m−ji+m-ji+m−j 结尾的

羊驼的博客 454

2019杭电多校第三场

1006 Fansblog 威尔逊定理 + 质数密度 题目给定一个大质数P,小于P的最大质数为Q,求Q!mod&ThinSpace;&ThinSpace;PQ!\mod PQ!modP p的范围为1e9到1e14,暴力求阶乘取模走不通,发现Q与P都为质数,根据素数密度分布,Q与P差的不是太远…直接暴力找。 (p−1)!≡−1mod&ThinSpace;&ThinSp...

侯山窝矿工 266

【hdu 6975】Forgiving Matching (FFT/NTT)

题目链接 题目大意 给定长度为 nnn 的字符串 sss 和长度为 mmm 的字符串 ttt ,字符串包含字符 ‘0’ ~ ‘9’ 以及通配符 ‘*’ ,统计 ttt 在 n−m+1n-m+1n−m+1 个位置上与 sss 匹配时失配的字符数。 思路 对每个字符,考虑它在 sss 和 ttt 中的生成函数,进行卷积。 如 s=“12311”, t=“5115” ,则两者字符 ‘1’ 的生成函数分别为 1+x3+x41+{x^3}+{x^4}1+x3+x4 , x−1+x−2x^{-1}+x^{-2}x−1+

qq_47903865的博客 481

2020杭电多校第三场 Tokitsukaze and Multiple

第四题:Tokitsukaze and Rescue 题目: Tokitsukaze has a sequence of length n, denoted by a. Tokitsukaze can merge two consecutive elements of a as many times as she wants. After each operation, a new element that equals to the sum of the two old elements will rep

星汐的博客 1434

HDU 6975 Forgiving Matching 快速傅里叶变换处理带通配符字符串匹配

文章目录题意题解 众所周知多校签到题中必有一道板子题,那么只要会使用板子就可以多做出一道签到了. 本题就是一道FFT的板子题. 题意 给出长度为nnn的字符串sss,长度为mmm的字符串ttt,定义两字符串匹配是两个字符串对应不相等的位置数量不超过kkk,其中通配符∗*∗能匹配任何一个字符.对k∈[0,m]k\in[0,m]k∈[0,m]的每一个值输出ttt在sss中能匹配的位置的数量. 题解 我们需要将ttt在每一个位置不能匹配上的个数加入cntcntcnt数组然后对其求一遍前缀和便能够得到答案. 对ch

Fuko_Ibuki的博客 7511

杭电2019多校第三场 HDU-6604 Blow up the city(支配树+必经点个数)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6604 题意:T组样例。第一行给出n、m(n个点,m条单向边)。接下来m行描述这条边(给出u、v)u->v。再给一个q,表明q个询问,每个询问给出a、b。询问有多少点,那它去掉后,a、b中至少一个点不能到达出度为0的点。(也就是a或b到达所有出度为0的点的必经点的个数,在反向图中也就是所有入度为0的...

birdmanqin的博客 311

2022杭电多校第三场题解

2022“杭电杯”中国大学生算法设计超级联赛(3)

weixin_46155777的博客 340
上一篇: 2021杭电多校第二场 1011——I love max and multiply
下一篇: Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma(线段树)
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值