[bzoj4503]两个串

ARS408毫米波雷达数据解析避坑指南:从硬件连接到Python处理 本文提供了ARS408毫米波雷达从硬件连接到Python数据处理的完整实战指南。针对串口通信不稳定、数据解析错误等常见问题,详细解析了硬件连接方案选择、串口数据高效读取策略、二进制协议解析的位操作技巧,并给出了坐标转换、目标跟踪及实时可视化的代码实现,帮助开发者快速搭建稳定的雷达数据处理流水线。 阅读详情

4503: 两个串

Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 190 Solved: 106
[Submit][Status][Discuss]
Description

兔子们在玩两个串的游戏。给定两个字符串S和T,兔子们想知道T在S中出现了几次,
分别在哪些位置出现。注意T中可能有“?”字符,这个字符可以匹配任何字符。
Input

两行两个字符串,分别代表S和T
Output

第一行一个正整数k,表示T在S中出现了几次
接下来k行正整数,分别代表T每次在S中出现的开始位置。按照从小到大的顺序输出,S下标从0开始。
Sample Input

ababcadaca

a?a
Sample Output

3

0

5
HINT

S 长度不超过 10^5, T 长度不会超过 S。 S 中只包含小写字母, T中只包含小写字母和“?”

这道题还是非常神的!!
可以设这样一个函数(假设现在没有通配符)
f[x]=∑ni=1(s1[i]−s2[i])2
如果这两个字符串相同,那么函数值肯定等于0。
如果有了通配符,那么就需要想办法让这个函数还等于0。
我们将a~z用1~26表示,”?”设为0。这样就可以构造一个新的函数:
f[x]=∑ni=1(s1[i]−s2[i])2∗s2[i]
      =∑ni=1s1[i]2∗s2[i]−∑ni=12∗s1[i]∗s2[i]2+∑ni=1s2[i]3
只要把第二个字符串倒过来,就成了一个卷积的形式,直接FFT就行了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int M=100010;
const int O=2000000;
int s[2][M],l[2],L,N,rev[O],dig[O];
struct S{
    double x,y;
    S operator + (const S &xx){return (S){x+xx.x,y+xx.y};}
    S operator - (const S &xx){return (S){x-xx.x,y-xx.y};}
    S operator * (const S &xx){return (S){x*xx.x-y*xx.y,x*xx.y+y*xx.x};}
}a[O],b[O],c[O],d[O];
inline double Pow(int x){
    return (double)x*x;
}
inline double POW(int x){
    return (double)x*x*x;
}
inline void FFT(S *a,int f){
    int i,j,k;
    S wn,w,x,y;
    for(i=0;i<N;++i) d[i]=a[rev[i]];
    for(i=0;i<N;++i) a[i]=d[i];
    for(i=1;i<=N;i<<=1){
        wn=(S){cos(2*M_PI/i),f*sin(2*M_PI/i)};
        for(j=0;j<N;j+=i){
            w=(S){1.,0.};
            for(k=j;k<j+i/2;++k){
                x=a[k];
                y=a[k+i/2]*w;
                a[k]=x+y;
                a[k+i/2]=x-y;
                w=w*wn;
            }
        }
    }
    if(f==-1) for(i=0;i<N;++i) a[i].x/=(double)N;
}
int main(){
    double sum=0;
    int i,ans=0,j,len;
    for(i=0;i<2;++i){
        char ch=getchar();
        while(1){
            if((ch>='a'&&ch<='z')||ch=='?') break;
            ch=getchar();
        }
        while((ch>='a'&&ch<='z')||ch=='?'){
            s[i][++l[i]]=(ch=='?')?0:(ch-'a'+1);
            ch=getchar();
        }
    }
    for(i=1;i<=l[1]/2;++i) swap(s[1][i],s[1][l[1]-i+1]);
    for(N=1;N<l[0];N<<=1,L+=1); N<<=1;L+=1;
    for(i=0;i<N;++i){
        for(j=i,len=0;j;j>>=1) dig[len++]=j&1;
        for(j=0;j<L;++j) rev[i]=rev[i]*2+dig[j];
    }
    for(i=0;i<l[0];++i) a[i]=(S){Pow(s[0][i+1]),0.};
    for(i=0;i<l[1];++i){
        b[i]=(S){(double)s[1][i+1],0.};
        sum+=POW(s[1][i+1]);
    }
    FFT(a,1);FFT(b,1);
    for(i=0;i<N;++i) c[i]=a[i]*b[i];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    for(i=0;i<l[0];++i) a[i]=(S){(double)s[0][i+1],0.};
    for(i=0;i<l[1];++i) b[i]=(S){Pow(s[1][i+1]),0.};
    FFT(a,1);FFT(b,1);
    for(i=0;i<N;++i) c[i]=c[i]-(a[i]*b[i])-(a[i]*b[i]);
    FFT(c,-1);
    for(i=l[1]-1;i<l[0];++i)
      if((int)(c[i].x+sum+0.5)==0) ++ans;
    for(printf("%d\n",ans),i=l[1]-1;i<l[0];++i)
      if((int)(c[i].x+sum+0.5)==0) printf("%d\n",i-l[1]+1);
}
面试提问:数据开发中如何通过指标拆解来指导SQL编写?(附拆解模板) 摘要:指标拆解是一种高效的数据分析方法,通过将复杂业务指标分解为可执行的原子指标,指导SQL查询的编写。核心步骤包括:明确指标定义、拆解原子指标、定位数据源、确定分组维度、构建中间表。文章提供了指标拆解模板和实际案例(如用户留存率计算),并总结了拆解带来的5大好处:逻辑清晰、易于调试、可复用、降低错误率、便于协作。最后强调"一定义、二拆解、三定位、四分步、五合并"的口诀,适用于数仓开发、BI报表等场景。 阅读详情

相关推荐

ESP32小车DIY:从零搭建无线遥控智能车(附完整代码与避坑指南)

本文详细介绍了如何从零开始DIY一台基于ESP32的无线遥控智能小车。内容涵盖核心硬件选型、电路设计、低延迟ESP-NOW无线通信协议的配置与实战,以及双电机差速控制算法与PWM调速的实现。文章提供了完整的代码示例和关键的避坑指南,旨在帮助开发者快速构建稳定可靠的智能车平台,并为进一步的功能扩展奠定基础。

gamma的博客 471

2019.02.06 bzoj4503: 两个串(fft)

传送门 题意简述:给两个字符串s,ts,ts,t,ttt中可能有通配符,问ttt在sss出现的次数和所有位置。 思路:一道很熟悉的题,跟bzoj4259bzoj4259bzoj4259差不多的。 然后把每个字符串的字符投射成数值(′a′&#x27;a&#x27;′a′ ~ ′z′→1&#x27;z&#x27;\rig...

weixin_30416497的博客 147

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6042

[BZOJ]4503 两个串:我的第一次FFT尝试

序言接触FFT半年了,水平一直停留在只会写个高精度乘法那个层次,所以就试着做了一道FFT的题。

总理同学的编程尝试 894

RTX 50系列显卡选购指南:从Stable Diffusion到深度学习,哪款最适合你的AI需求?

本文深入分析了RTX 50系列显卡如何满足不同的AI应用需求。针对Stable Diffusion图像生成,强调显存容量是关键;对于大语言模型本地推理,需平衡算力与显存;而深度学习训练则更看重算力效率。文章对比了RTX 5090、5080、5070等型号的核心规格与适用场景,并提供了从入门到专业的实战配置建议,帮助用户根据自身AI工作负载精准选择最具性价比的显卡。

linux6sysadmin的博客 692

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2624

【BZOJ 4503】4503: 两个串 (FFT)

4503: 两个串 Time Limit:20 SecMemory Limit:256 MBSubmit:497Solved:226 Description 兔子们在玩两个串的游戏。给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现。注意T中可能有“?”字符,这个字符可以匹配任何字符。 Input 两行两个字符串...

weixin_30339969的博客 158

车辆贷款违约预测挑战赛

2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost

平平淡淡,戒急用忍,一生学闭嘴。 3341

BZOJ4502 串题解(AC自动机)

题目:BZOJ4502. 题目大意:给定一些单词,求两个在是这些单词中任意一个单词前缀的串拼起来能够组合出的字符串数量. 考虑最多有多少种可能,发现最多会有n2n^2n2种情况,但是这写情况中会有重复. 考虑去掉重复,发现一个若一个字符串s=s1+s2=s1′+s2′s=s_1+s_2=s&amp;amp;amp;amp;amp;amp;amp;#x27;_1+s&amp;amp;amp;amp;amp;amp;amp;#x27;_2s=s1​+s2​=s1′​+s2′​且∣s1′∣&

hzk_cpp的博客 428

ROG幻16Air新机避坑:Ubuntu 22.04下NVIDIA驱动、CUDA与Isaac Gym的兼容性实战

本文详细记录了在ROG幻16Air新机上安装Ubuntu 22.04,并成功配置NVIDIA驱动、CUDA与Isaac Gym强化学习开发环境的完整实战过程。针对官方文档未明确支持Ubuntu 22.04的挑战,文章提供了从驱动安装、CUDA版本选择、Python虚拟环境搭建到Isaac Gym兼容性调试的一站式解决方案,帮助开发者在新硬件上高效部署机器人仿真与训练平台。

weixin_28419039的博客 221

YOLOv8有效涨点,增强型 YOLOV8 与多尺度注意力机制特征融合,附代码,详细步骤

在本实验中,我们通过将双层路由注意(BRA)、广义特征金字塔网络(GFPN)和第四检测头结合到YOLOv8中,开发了一种新颖的BGF-YOLO架构。BGF-YOLO 包含注意力机制,可以更多地关注重要特征,特征金字塔网络可以通过将高级语义特征与空间细节合并来丰富特征表示。此外,我们研究了不同的注意力机制和特征融合、检测头架构对检测准确性的影响。实验结果表明,与YOLOv8x相比,BGF-YOLO的mAP50增加了4.7%。

kay_545 3048

bzoj4503: 两个串 bitset

目录 题目链接 题解 代码 题目链接 bzoj4503: 两个串 题解 暴一发bitset f[i][j] 表示 S[1..i] 是否有个后缀能匹配 T[1..j] 那么假设 S[i+1] 能匹配 T[s],令 f[i+1][s] | = f[i][s-1] 所以预处理...

agtvo48266的专栏 200

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6564

bzoj4503 两个串

两个串 题目背景: bzoj4503 分析: 我相信各路大牛在看到这道题的时候一定会不屑的表示这个不是套路题吗····的确这真心就是一个简单的套路,快速傅立叶变换(FFT),我们选择将T进行翻转,然后令 c[j + m – 1] = sigma((a[j + i] – b[m – 1 – i]) ^ 2* a[j + i] * b[m – 1 – i]) (0

scarlyw的博客 830

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BZOJ4503 - 两个串

Portal Description 同BZOJ4259 - 残缺的字符串,双倍经验题 但这题范围更小,时限更长! Code //两个串 #include <algorithm> #include <complex> #include <cstdio> using std::swap; typedef std::complex<double&gt...

TC1129的博客 137

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BZOJ4503 两个串

FFT神仙题。 在没有通配符的情况下,考虑两个长度为nnn 的串S,TS,TS,T 相等的充要条件是 ∀i∈[0,n−1]Si=Ti∀i∈[0,n−1]Si=Ti\forall{i}\in{[0,n-1]}\;\;S_i=T_i 可以变形为 ∀i∈[0,n−1]Si−Ti=0∀i∈[0,n−1]Si−Ti=0\forall{i}\in{[0,n-1]}\;\;S_i-T_i=0 自然...

sjkmost的博客 367

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

bzoj4503两个串 快速傅里叶变换(FFT)

题目传送门:bzoj4503题目大意:给出两个串S和T,T中有通配符(可以与任意字符匹配),求T在S中匹配的次数及位置。题目一看,怎么做啊,kmp?AC自动机?好像很困难啊。 但是,我们转换一下思路。我们定义ck=Σki=0(Si−Tk−i)2∗Tk−jc_k = \Sigma_{i = 0}^{k} (S_i - T_{k - i} ) ^ 2*T_{k - j}。当且仅当ck==0c_k ==

Nickwzk的博客 1289

BZOJ4503: 两个串【FFT】

4503: 两个串 【题目描述】 传送门 【题解】 我们设置一个函数,F(j)=∑i=1∣T∣T(i)∗(S(i+j)−T(i))2F(j)=\sum_{i=1}^{|T|} T(i)*(S(i+j)-T(i))^2F(j)=∑i=1∣T∣​T(i)∗(S(i+j)−T(i))2 为什么要这么设置呢,我们发现F(x)=0F(x)=0F(x)...

aiweiluan5095的博客 308

BZOJ4503 两个串 多项式 FFT

题目传送门 - BZOJ4503 题意概括   给定两个字符串S和T,回答T在S中出现了几次,在哪些位置出现。注意T中可能有?字符,可以匹配任何字符。 题解   首先,假装你已经知道了这是一道$FFT$题。   考虑怎样$FFT$。   字符串匹配的时候,对于匹配成功的对应字母的编号(比如分别是$i$和$j$),满足了$i-j$都相同。但是我们需要的是$i+j$都相等。   ...

weixin_30527323的博客 110

bzoj4503: 两个串

4503: 两个串 链接&&题意 bzoj 兔子们在玩两个串的游戏。给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现。注意T中可能有“?”字符,这个字符可以匹配任何字符。 思路 没有通配符。 \(\sum\limits_{i=1}^{m-1}(S[j+i]-T[i])^2=0\) 旋转T \(\sum\limits_{i=1}^{m-1}(S[j...

weixin_30438813的博客 95
上一篇: [bzoj4600][SDOI2016]硬币游戏
下一篇: [bzoj4552][TJOI&&HEOI2016]排序
FZHvampire
博客等级 码龄12年 24粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值