【GDOI2016模拟3.9】暴走的图灵机

仪器使用 | Tek 示波器连接MATLAB 本文记录通过Tek visa使得MATLAB调用示波器采集波形的方法,主要作用是记录,方便再次配置。 阅读详情

题目

这里写图片描述

分析

我们发现当两个字符串合并时,a0、a1表示左右两个字符串中有多少个T,C表示合并处新增的T的个数,那么
a0=a1
a1=a0+a1+C
令s0和s1表示左右手两个字符串,那么每一次操作后左右手字符串分别为:

操作次数             左手  右手
  0                  s0   s1
  1                  s1   s0s1
  2                s0s1   s1s0s1
  3              s1s0s1   s0s1s1s0s1
  4          s0s1s1s0s1   s1s0s1s0s1s1s0s1
  5    s1s0s1s0s1s1s0s1   s0s1s1s0s1s1s0s1s0s1s1s0s1
  ···

然后我们发现,从第1次操作以后,每次合并处是以s1s1和s1s0为一个循环。也就是说当|s0|>=m-1时,我们用KMP处理出a0、a1以及s1s1和s1s0合并时新增T的个数,然后O(N)递推一遍就可以了。
但是n<=10^9,只能拿60分。
因为递推时有循环,所以就可以构造矩阵,打个矩阵快速幂O(logN)。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
using namespace std;
char s[30000],s1[30000],s2[30000],t[30000];
long long n,m,tot,ans,mo,next[30000],f[2][5],lens=1,lens1=1,nn,nnn;
long long jz[5][5]=
{
{0,0,0,0,0},
{0,1,1,0,0},
{0,1,2,0,0},
{0,1,1,1,0},
{0,0,1,0,1} 
},b[5][5];
long long getnext()
{
    long long i,j,k;
    j=0;
    for(i=2;i<=m;i++)
    {
        while(j>0 && t[j+1]!=t[i]) j=next[j];
        if(t[j+1]==t[i]) j++;
        next[i]=j;
    }
}
long long kmp()
{
    long long i,j,k;
    getnext();
    j=0;
    for(i=1;i<=lens;i++)
    {
        while(j>0 && t[j+1]!=s[i]) j=next[j];
        if(t[j+1]==s[i]) j++;
        if(j==m) f[0][1]++;
    }
    j=0;
    for(i=1;i<=lens1;i++)
    {
        while(j>0 && t[j+1]!=s1[i]) j=next[j];
        if(t[j+1]==s1[i]) j++;
        if(j==m) f[0][2]++;
    }
}
long long kmp1()
{
    long long i,j,k;
    k=0;
    for(i=lens-m+2;i<=lens;i++)
        s2[++k]=s[i];
    for(i=1;i<=m-1;i++)
        s2[++k]=s1[i];
    j=0;
    for(i=1;i<=m+m-2;i++)
    {
        while(j>0 && t[j+1]!=s2[i]) j=next[j];
        if(t[j+1]==s2[i]) j++;
        if(j==m) f[0][0]++;
    }
    k=0;
    for(i=lens1-m+2;i<=lens1;i++)
        s2[++k]=s1[i];
    for(i=1;i<=m-1;i++)
        s2[++k]=s[i];
    j=0;
    for(i=1;i<=m+m-2;i++)
    {
        while(j>0 && t[j+1]!=s2[i]) j=next[j];
        if(t[j+1]==s2[i]) j++;
        if(j==m) f[0][3]++;
    }
    k=0;
    for(i=lens1-m+2;i<=lens1;i++)
        s2[++k]=s1[i];
    for(i=1;i<=m-1;i++)
        s2[++k]=s1[i];
    j=0;
    for(i=1;i<=m+m-2;i++)
    {
        while(j>0 && t[j+1]!=s2[i]) j=next[j];
        if(t[j+1]==s2[i]) j++;
        if(j==m) f[0][4]++;
    }
}
long long mi()
{
    long long x=0,y=1,i,j,k;
    while(nn>0)
    {
        if(nn&1==1)
        {   
            for(i=1;i<=4;i++)
            {
                f[x][i]=0;
                for(j=1;j<=4;j++)
                    f[x][i]=(f[x][i]+(f[y][j]*jz[j][i])%mo)%mo;
            }
            x=y;
            y=1-y;
        }
        for(i=1;i<=4;i++)
            for(j=1;j<=4;j++)
            {
                b[i][j]=0;
                for(k=1;k<=4;k++)
                {
                    b[i][j]=(b[i][j]+(jz[i][k]*jz[k][j])%mo)%mo;
                }
            }
        for(i=1;i<=4;i++)
            for(j=1;j<=4;j++)
            {
                jz[i][j]=b[i][j];
            }
        nn/=2;
    }
    return y;
}
int main()
{
    scanf("%d%d%d",&n,&m,&mo);
    scanf("%s",t+1);
    s[1]='0';
    s1[1]='1';
    long long i,j,k,l,x,y;
    for(j=1;j<=n;j++)
    {
        for(i=1;i<=lens1;i++)
            s2[i]=s1[i];
        for(i=1;i<=lens;i++)
            s1[i]=s[i];
        for(i=1;i<=lens1;i++)
        {
            s1[lens+i]=s2[i];
        }
        for(i=1;i<=lens1;i++)
            s[i]=s2[i];
        x=lens1;
        lens1+=lens;
        lens=x;
        y=j;
        if(lens>=m)
            break;
    }
    kmp();
    if(n==y)
    {
        printf("%d\n",f[0][1]%mo);
        return 0;
    }
    kmp1();
    f[1][1]=(f[0][2])%mo;
    f[1][2]=(f[0][1]+f[0][2]+f[0][0])%mo;
    f[1][3]=(f[0][3])%mo;
    f[1][4]=(f[0][4])%mo;
    n-=y+1;
    x=1;
    y=0;
    y=f[1][3];
    n-=0;
    nnn=n%2;
    nn=n/2;
    x=mi();
    if(nnn==1)
    {
        printf("%d\n",(f[x][2])%mo);
        return 0;
    }
    else
        printf("%d\n",f[x][1]%mo);
}
LabVIEW控制泰克示波器:从驱动配置到SCPI波形读取全流程 在自动化测试与仪器控制领域,上位机与可编程仪器的通信是搭建高效测控系统的基础。SCPI(可编程仪器标准指令)作为仪器控制的通用字符指令标准,配合VISA统一的I/O接口层,可屏蔽底层硬件差异,让开发者专注于业务逻辑本身。在LabVIEW这一图形化编程环境中,工程师能快速实现仪器控制、数据读取与分析功能,大幅提升开发效率。对于实验室研发、产线批量测试等高频场景,借由示波器完成连续波形记录、批量保存及自动判定时,上位机编程的优势尤为明显。本文围绕LabVIEW控制泰克示波器,从接口选型、驱动安装到SCPI指令配 阅读详情

相关推荐

LabVIEW连接泰克示波器:VISA与SCPI编程实战指南

在自动化测试与仪器控制领域,LabVIEW是主流的图形化编程环境,而泰克示波器则是常见的信号采集设备。实现上位机对示波器的远程控制,关键在于理解VISA与SCPI的分工:VISA负责底层连接与数据传输,SCPI指令则用于描述测量意图。通过掌握GPIB、USB、LAN等接口的资源名配置,以及初始化、波形读取和测量参数设置的标准化流程,开发者可以快速搭建稳定可靠的数据采集系统。本文从仪器控制的基础概念出发,讲解VISA资源管理、SCPI指令序列、波形解析与常见故障排查,帮助工程人员规避连接超时和数据丢失等典型陷

weixin_32349093的博客 297

【亲测免费】 高效控制与数据采集:LABVIEW连接操作泰克示波器范例

在现代工程和科研领域,示波器是不可或缺的工具之一。然而,手动操作示波器不仅耗时,还容易引入人为误差。为了解决这一问题,我们推出了基于LABVIEW的泰克示波器控制与数据采集范例项目。该项目通过LABVIEW软件实现对泰克示波器的远程控制,自动采集波形数据并保存到PC本地,极大地提高了工作效率和数据准确性。 ## 项目技术分析 本项目主要利用LABVIEW的强大图形化编程环境,结合泰克示波器的通

gitblog_09787的博客 666

LabVIEW控制泰克示波器:SCPI指令、波形读取与自动化采集

仪器编程是自动化测试系统的核心环节,而SCPI作为仪器通信的标准语言,配合VISA驱动层,能屏蔽USB、LAN、GPIB等接口差异,让程序统一控制不同型号的示波器。在LabVIEW环境中,通过VISA节点发送SCPI命令,可实现通道配置、触发设置、波形读取等操作。泰克示波器返回的二进制波形数据需要结合WFMOUTPRE元数据解析,转换为电压/时间物理量,最终存储为TDMS文件,满足批量采集场景下的高性能写入需求。本文梳理了从驱动选型、资源地址确认到波形解析、文件导出的完整链路,并针对超时、字节序、资源占用等

weixin_30175731的博客 229

【GDOI 2016模拟3.9】暴走的图灵机

题目描述你有ll和rr两个字符串,初始l="0",r="1"l="0", r="1",每轮操作定义如下。 将rr变成原来的l+l+原来的rr,这里的++表示将两个字符串连接起来 将ll变成原来的ll 给定一个长度为mm的匹配串ss,问操作nn次后,ll中包含了多少个ss作为子串,答案对pp取模。n≤109,m≤104,0<p≤109n\leq 10^9, m\leq 10^4, 0<p\leq 10

Yves___的专栏 743

LabVIEW连接泰克示波器全链路实践:SCPI通信、二进制波形解析与TDMS存储

示波器自动化采集是测试测量领域的基础工程能力,其核心在于理解仪器通信协议(如SCPI)、物理接口(LAN/USB)与数据格式(ASCII/二进制)的协同机制。泰克示波器遵循IEEE 488.2标准,但需适配专属命令(如DATA:ENCDG、WFMPRE)才能正确获取波形元数据和原始ADC值;LabVIEW通过VISA实现底层通信,关键在资源名构造、超时控制与二进制块解析——尤其CURVE?响应含长度前导头,必须分步读取以避免内存溢出。该能力广泛应用于课程设计、产线自动测试及嵌入式系统联调,支撑真实场景下的可

weixin_29172201的博客 137

LabVIEW连接泰克示波器:TCP/IP稳定通信与波形可靠获取实战

示波器远程控制是自动化测试与电子测量的基础能力,其核心依赖于VISA资源管理与SCPI协议交互原理。通过TCP/IP替代USBTMC可规避驱动兼容性、资源名漂移及缺乏异步通知等工程痛点,显著提升产线级部署的稳定性与可维护性。技术价值体现在连接鲁棒性增强、多型号适配简化及二进制波形数据精准解析。典型应用场景包括高校课程设计、毕业设计中的仪器集成,以及工业现场多台泰克TBS/MSO系列示波器的批量控制。本文聚焦LabVIEW与泰克示波器的稳定通信链路构建,涵盖VISA配置、SCPI命令精要、波形缩放参数同步及断

weixin_29189381的博客 268

JZOJ4374. 【GDOI2016模拟3.9】暴走的图灵机

题目大意 初始给定两个字符串”0”,”1”,每次操作将前两个串连接作为新串。求N次操作后的字符串中所包含给定字符串T的个数,答案对PP取模。 M为字符串T的长度。

Akakii的博客 680

泰克示波器程序员使用手册 077-0444-xx TDS2014C

用于tek示波器的程序员使用手册,根据该手册可编写pc与示波器的通讯指令

GDOI2016模拟3.9 暴走的图灵机 矩阵乘法优化暴力

暴走图灵机 矩阵乘法优化暴力!

YxuanwKeith的博客 1282

泰克示波器LabVIEW驱动Tektronix-DPO-MSO-2000-4000-Series.rar

泰克示波器LabVIEW驱动DPO2024等

matlab开发-TektronixDPO4034示波器驱动程序

matlab开发-TektronixDPO4034示波器驱动程序。Tektronix DPO4034 Matlab仪器驱动程序

【GDOI模拟】暴走的图灵机

Description你有l和r两个字符串,初始l=”0”,r=”1”,每轮操作定义如下。 将r变成原来的l+原来的r,这里的+表示将两个字符串连接起来 将l变成原来的l 给定一个长度为m的匹配串s,问操作n次后,l中包含了多少个s作为子串,答案对p取模。 n≤109,m≤104,0<p≤109n≤10^9,m≤10^4,0<p≤10^9Solution首先这道题目就是一个斐波拉契形式的字符

Facico的博客 861

泰克新系列数字存储示波器提供全套USB连接功能

泰克公司(NYSE:TEK) 宣布推出TDS1000B和TDS2000B系列数字存储示波器。凭借高达200MHz的带宽,每秒2GS的单通道最大采样率,USB闪存和设备接口,以及业内首推的终身保修,2通道与4-通道的TDS1000B和TDS2000B系列示波器的设计目的旨在为设计师和测试工程师简化设置,测试和保存测试结果的操作,并提供前所未有的卓越价值。        与示波器共同推出的还包括泰克OpenChoice PC通信软件和NI SignalExpress泰克版本 交互式测量软件,后者真正使示波器实现了通过USB 即插即用立刻与PC连接的功能。而为该系列产品提供终身保修更是泰克公司为客户

【亲测免费】 Labview与泰克TBS示波器开发例程

Labview与泰克TBS示波器开发例程 【下载地址】Labview与泰克TBS示波器开发例程 Labview与泰克TBS示波器开发例程本仓库提供了一个Labview与泰克TBS示波器开发的示例程序,包含了官方提供的开发实例函数以及一些额外的示例代码 ...

gitblog_09725的博客 977

Java 简易版 UDP 多人聊天室

【代码】Java 简易版 UDP 多人聊天室。

nmy15570188135的博客 1187

2025-08-19利用opencv检测图片中文字及图片的坐标

该代码实现了图片中中文文本的检测与位置计算功能。主要使用CnOcr库进行OCR识别,结合OpenCV和PIL库处理图像。功能包括:1)检测图片中的中文文本及位置坐标;2)计算每个文本的像素宽度和高度;3)在原图上绘制文本边界框并标注识别结果。代码通过put_chinese_text函数解决中文显示问题,最终输出各文本内容、坐标位置及尺寸信息。适用于需要获取图片中文字精确位置的应用场景。

m0_58149406的博客 395

泰克示波器LabVIEW驱动资源下载

泰克示波器LabVIEW驱动资源下载 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了泰克示波器LabVIEW驱动的下载资源,适用于DPO2024等型号。文件名为“泰克示波器LabVIEW驱动Tektronix-DPO-MSO-2000-4000-Series.rar”,包含了对泰克示波器进行控制和数据采集所需的驱动程序和库文件。 此驱动程序允许用户通过LabVIEW...

gitblog_06789的博客 457

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1121
上一篇: 【有趣的有趣的家庭菜园】题解
下一篇: 【NOIP2015模拟11.2晚】我的天
无尽的蓝黄
博客等级 码龄11年 30粉丝 219原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值