upc-Assessing Genomes(kmp求最小循环节)

VLOOKUP_fixed.py 立即下载
题目描述

The world is at the brink of extinction. A mutated virus threatens to destroy all living organisms.
As a last hope, a team of super-smart scientists, including – of course – you, is currently working on an antivirus. Unfortunately, your team is unable to analyse the DNA in time. They sequenced n parts of the virus’ DNA and need to match them with n available strands for antiviruses. As the algorithms expert, you need to implement a specialised procedure to solve this problem.
Your approach needs to be fast – there is not much time left!
You first need to determine the repetition score of each DNA sequence. The repetition score of a sequence s is equal to the length of the shortest sequence u such that s is equal to the k-fold repetition of u, for some positive integer k. For instance, ATGATG has a repetition score of 3, since it can be produced by repeating ATG two times. On the other hand, ATATA has a repetition score of 5, as it cannot be produced from any proper substring.
Once you obtained the scores of all sequences, you need to match the n antivirus sequences with the n virus sequences in a way that minimises the damage caused by the virus. When two sequences are matched, the damage caused by the virus is equal to the squared difference between the two repetition scores. For instance, matching the antivirus sequence ATGATG with the virus sequence ATATA causes (3 − 5)2 = 4 units of damage.
If you match the DNA sequences optimally, what is the minimal total damage caused by the virus, taken as a sum over all matched pairs?

输入

The input consists of:
• A line with an integer n (1 ≤ n ≤ 50), the number of DNA sequences of the virus and antivirus each.
• n lines, each with a virus DNA sequence.
• n lines, each with an antivirus DNA sequence.
Each DNA sequence is a non-empty string with a length of at most 250 and consists of lowercase letters a-z and uppercase letters A-Z.

输出

Output one integer, the minimal total damage.

样例输入

2
TTTTTT
TATG
TATATA
AAAGAAAG

样例输出

1

题意

就是给你 2n 个串,前 n 个是一组,后 n 个是一组,每个串对应一个值(这个值就是最小循环节的长度)
第一个组里的一个串可以与第二个组里的一个串求一个“伤害”(即两个串的差值的平方),让你求最小的“伤害”和(每个串只能参与一次“伤害”的计算)

思路

kmp 求最小循环节的长度,sort 排序,对应求 " 伤害 " 和

代码
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip> 
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
int n,a[260],b[260],Next[260],suffix[260];//Next[i]表示前面长度为i的子串中,前缀和后缀相等的最大长度。
char s[260];
//求str对应的next数组
void getNext(char const* str, int len)
{
    int i = 0;
    Next[i] = -1;
    int j = -1;
    while( i < len )
    {
        if( j == -1 || str[i] == str[j] )   //循环的if部分
        {
            ++i;
            ++j;
            //修正的地方就发生下面这4行
            if( str[i] != str[j] ) //++i,++j之后,再次判断ptrn[i]与ptrn[j]的关系
                Next[i] = j;      //之前的错误解法就在于整个判断只有这一句。
            else
                Next[i] = Next[j];  //这里其实是优化了后的,也可以仍是next[i]=j
            //当str[i]==str[j]时,如果str[i]匹配失败,那么换成str[j]肯定也匹配失败,
            //所以不是令next[i]=j,而是next[i] = next[j],跳过了第j个字符,
            //即省去了不必要的比较
            //非优化前的next[i]表示前i个字符中前缀与后缀相同的最大长度
        }
        else                                 //循环的else部分
            j = Next[j];
    }
}
 
//在目标字符串target中,字符str出现的个数
//n为target字符串的长度,m为str字符串的长度
int kmp_match(char *target,int n,char *str,int m)
{
    int i=0,j=0;  //i为target中字符的下标,j为str中字符的下标
    int cnt=0;   //统计str字符串在target字符串中出现的次数
    while(i<=n-1)
	{
        if(j<0||target[i]==str[j])
		{
            i++;
            j++;
        }
        else{
            j=Next[j]; //当j=0的时候,suffix[0]=-1,这样j就会小于0,所以一开始有判断j是否小于0
        }
 
        //str在target中找到匹配
        if(j==m)
		{
            cnt++;
            j=Next[j];
        }
    }
    return cnt;
}
//在目标字符串target中,若存在str字符串,返回匹配成功的第一个字符的位置
int kmp_search(char *target,int n,char *str,int m)
{
    int i=0,j=0;  //i为target中字符的下标,j为str中字符的下标
    int cnt=0;   //统计str字符串在target字符串中出现的次数
    while(i<n && j<m)
	{
        if(j<0||target[i]==str[j])
		{
            i++;
            j++;
        }
        else
		{
            j=suffix[j]; //当j=0的时候,suffix[0]=-1,这样j就会小于0,所以一开始有判断j是否小于0
        }
    }
    if(j>=m)
        return i-m;
    else
        return -1;
}
int main()
{
     
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",s);
        int len=strlen(s);
        getNext(s,len);
        a[i]=len-Next[len];
        if(len%a[i]!=0) a[i]=len; 
        //假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len]
		//如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。
		//如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(len-L)%L=L-next[len]%L,L=len-next[len]。
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%s",s);
        int len=strlen(s);
        getNext(s,len);
        b[i]=len-Next[len];
        if(len%b[i]!=0) b[i]=len; 
    }
    //a[i] b[i] 求的是对应串的最小循环节 
    sort(a+1,a+n+1);
    sort(b+1,b+n+1);
    ll ans=0;
    for(int i=1;i<=n;i++) ans=ans+(a[i]-b[i])*(a[i]-b[i]);
    printf("%lld",ans);
    return 0;
} 

这里我套用的网络上的kmp模板,附上大佬网址点此进入

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

相关推荐

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

文本生成评估指标详解及计算(BLEU)

BELU详解及计算实例

arvinChen的博客 8662

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

Imprecise Computer - ( 思维 / 递推 )

题目描述 The Imprecise Computer (IC) is a computer with some structural issue that it can compare two integers correctly only when their difference is at least two. For example, IC can always correctly answer ‘4 is larger than 2’, but it can answer either ‘2 i

Cosmic_Tree的博客 1528

二维卡尔曼滤波位置,速度融合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

Johnlee2019的博客 8451

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 423

Going Home - ( 抽屉原理 )

题目链接:点击进入 题目 题意 给一个长度为 n 的数组,问是否存在 x , y , z , w ( 四个数互不相同 ) ,满足 a [ x ] + a [ y ] = a [ z ] + a [ w ] ; 思路 暴力枚举 x 与 y ,得出和值 C ,2 <= C <= 5e6。 有 n ^ 2 对( x , y ),和值 C 大约有 5e6 种取值,当 n ^ 2 > 5e6 时,根据抽屉原理,必有一个和值对应两个以上的( x , y )对,但是,此时可能对应的( x , y )

Cosmic_Tree的博客 1407

hpm6750evk2开发板(一)菜鸟入门

hpm6750与我们平时常用的stm单片机在开发环境和开发方法上有很大的区别,所以上手还是需要花一点时间的,拿到板子先不要急着上电调试,我们先找资料学习一下了,免得多走冤枉路,以下是我整理的一些学习资源,包括开发板使用手册、芯片SDK、开发工具、视频资料等,建议先把使用手册和学习视频先看了,再取搭建环境测试。最近刚入手一块hpm6750evk2开发板,花了几天时间学习,算是菜鸟入门了,今天分享一下学习过程。看完资料后,把开发工具安装上,下一篇文章我们分享一下调试工程的过程和遇到的问题。

Silas1750的博客 3083

ABC Conjecture(大数分解)-2020ccpc(威海)

题意 给你一个范围是 [ 1 , 10 ^ ​18​​ ] 的数,让你求这个数能不能被一个 素数的平方 整除(即 c % ( i * i ) == 0) 思路1 用大数分解模板,将 c 分解得到 c 的所有质因子,然后去重(模板得到的是无序且没去重的),然后将所有质因子相乘,得到 tmp , 如果 tmp 跟 c 相等,说明 c 不能被素数的平方整除,否则可以。 (记得特判 c == 1 的情况!!! c = 1 是 “ no ” ) 代码1 #include<iostream> #incl..

Cosmic_Tree的博客 1335

操作系统笔记【全-408统考】【附思维导图】

操作系统 思维导图 概述 操作系统的概念 管理计算机软件和硬件资源 最基本的系统软件 特征 并发 区分并发并行 共享 互斥共享方式 同时访问方式 虚拟 逻辑上多个。虚拟处理器的分时,空分复用的虚拟存储器 采用多道程序设计 异步 由于资源有限,进程走走停停 可能会导致进程产生与时间有关的错误。访问顺序 目的和功能 1.管理计算机资源 功能 处理机管理、存储器管理、文件管理、设备管理 目标:安全、有效 2.作为用户与计算机硬件系统

wvdon 2364

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 450

A Golden Spirit (思维)-2020ccpc(威海)

题意 一座桥,桥两侧各有 n 个人,每个人都想去桥对面休息 x 分钟后再返回(必须休息够 x 分钟才能被背回去),问你满足所有人的愿望,最少需要多少分钟(你背一个老人过一次桥需要 t 分钟) 思路 最优的办法是(前 2 n 次)每一次过桥先背一个人去对面休息,等到所有(2 n个)人都到了(相对于自己一开始的位置的)桥对面,然后,这时候自己应该在自己最开始的位置,而此时每个人的休息所剩时间应该是: x x-2t x-4t … x-2*(n-1)t | x-t x-3t x-..

Cosmic_Tree的博客 1054

CloudCompare如何进行二次开发?

CloudCompare源代码编译成功后,即可进行二次开发,可以通过修改源码或者制作插件实现二次开发。本文二次开发采用修改CloudCompare的源代码的方式,分别修改mainwindow.ui、mainwindow.h、mainwindow.cpp,实现扩展功能,克隆选中的点云。

【cacrle】的博客 5331

Gym - 103069B - Rectangle Flip 2( 暴力 + 思维 )

题目链接:点击进入 题目 题意 n * m 的网格,每秒删除其中一个小网格,问每秒后,还剩余多少个好的矩形 ( 只要是矩形,同时矩形内没有被删除的格子 ) 思路 蚌埠住啦,这题因为万恶的javaweb被我搁置了好久,我老早就想写了,难受≧ ﹏ ≦ 按照顺序删除点,对于每个删除的点,看会影响多少新矩形。思考一下(脑袋里构一下图),一个新删除的点,能影响到的,只能是以这个点x为中轴,上下每行左右扩到最大的部分(最大就是指碰到被删除的点,或者边界),这个上下每行也是在x轴上上下扩到最大的。我们若是确定每行能扩

Cosmic_Tree的博客 834

Python 爬虫实战:爬取股票数据做 K 线图可视化

摘要:本文介绍基于Python的股票数据爬取与K线图可视化全流程技术方案。通过Requests库抓取东方财富网股票数据,使用Pandas进行清洗处理,并利用mplfinance库实现专业K线图绘制。文章详细讲解了数据爬取接口分析、反爬策略配置、K线图绘制方法(包含基础K线图和带均线的进阶版本),以及核心统计指标计算。该方案可应用于股票价格趋势分析,为投资决策提供数据支持,同时强调了数据使用的合规性和技术优化方向。

2503_91057718的博客 2045

21天学会基于 Linux 的 NPU 固件开发--12.3 如何参与 Linux 内核 NPU 子系统开发

从修复一个简单的文档拼写错误开始,或者为现有的开源 NPU 驱动(如 Sophgo, StarFive, Etinix 等厂商已上游化的驱动)添加一个缺失的 IOCTL 支持或优化一个算子,都是伟大的第一步。在 2026 年的 Linux Kernel (v6.12+) 中,NPU 驱动不再是孤立的字符设备,而是深度集成在 DRM 和 DMA-BUF 生态中,实现了与 GPU 类似的资源管理和调度能力。内核驱动必须提供清晰的 UAPI (User API),通常定义在。Step 4: 合并 (Merge)

amy_mhd的博客 66

The number of steps(概率dp问题)

题目描述 Mary stands in a strange maze, the maze looks like a triangle(the first layer have one room,the second layer have two rooms,the third layer have three rooms …). Now she stands at the top point(the first layer), and the KEY of this maze is in the lowes

Cosmic_Tree的博客 805

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Clock Master(分组背包)-2020ccpc(威海)

题意: T 组样例,每组给一个 n ,范围是 [ 1 , 30000 ] ,要求将 n 分解成: n = a1 + a2 + … + am ( m 没有限制 ),使得(a1 + a2 + … + am)的最小公倍数最大,输出这个最大值的对数。 思路: 将题目转换一下,就变成了将n分解,分解成 使得 尽可能的大。同时答案是要求输出这个最大值的对数,这个式子又转换为 有 k 种(组)素数,每种(组)素数只能选择一个幂次( p ^ ( ei )) ,第i个数的容量是 p ^ ( ei ),价值是log (.

Cosmic_Tree的博客 799

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Chat Group -( 组合数 + 乘法逆元 )

题目链接:点击进入 题目 题意 n 个人, >= k 人就可以组成一个小组,问能组成多少个小组 思路 答案 = c ( n , k ) + … + c ( n , n ) = 2 ^ n - ( c ( n , 0 ) + … + c ( n , k - 1 ) ) c ( n , i ) = c ( n , i - 1 ) * ( n - i + 1 ) / i i 的逆元: 1 / i = i ^ ( mod - 2 ) 代码 #include<iostream> #includ

Cosmic_Tree的博客 693

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU - 5256-序列变换(求最长严格递增子序列)

题目连接:点击进入 题意 一个数列,要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。输出最少需要修改多少个元素。 思路 求最长的严格递增子序列 (O ( N ^ 2 ) 会 T , 所以用 O( N lg N)的 - - 二分查找) 这里解释一下对于初始的序列 a [ i ] 的偏移(也就是令 a [ i ] = a [ i ] - i) 因为严格递增要满足 a [ i ] - a [ j ] >= i - j , 即 a [ i ] - i >=

Cosmic_Tree的博客 657

What Goes Up Must Come Down(树状数组求逆序对)

题意 给你一个长度为n的数字序列,你每次可以交换任意两个相邻的数字,让你求出达到目标序列(前面不递减,后面不递增) 思路

Cosmic_Tree的博客 644

L3-011 直捣黄龙(最短路+dfs路径回溯)

题目链接:点击进入 思路 最短路+dfs路径回溯,不难,但是我被卡了,没看出来最短距离相等时,路径数应该是两者相加(我记得我之前做这类的题目的时候也是这里被卡,我真是猪脑子(* ̄(oo) ̄))。。。写博客纪念一下o(╥﹏╥)o 代码 #include<iostream> #include<cstring> #include<queue> #include<map> #include<cstdio> #define pii pair<int,i

Cosmic_Tree的博客 620

Gym - 102483G Game Design( 思维 + 模拟 )

题目链接:点击进入 题目 题意 思路 代码 #include<bits/stdc++.h> #define pii pair<int,int> using namespace std; const int maxn=1e6+10; const int base=1001; int pos[maxn]; string s; vector<pii>v; void print(int x,int y) { cout<<(-x)<<" "<&

Cosmic_Tree的博客 600

2021年度训练联盟热身训练赛第一场-G Birthday Paradox ( 数学 )

题目链接: 题目 题意 m个人,n组生日(可能这一天就一个人过生日,也可能多个人过生日),一年365天,问给定的这种情况的概率 思路 设m是总人数,那么总的情况数是 符合题意的情况数: 1、选出的n天生日的情况数, 2、m人分成n组的情况数(排除组内重复) 3、n个日期与n个组一一对应的情况数 综上: 答案为 然后取对数() ...

Cosmic_Tree的博客 593

CodeForces 1267

题目:B–Balls of Buma 题意 给你一个字符串(代表不同颜色),让你插入一个字符(一种颜色)后,可以消掉整个字符串。(相同颜色、长度变长、长度>=3才会抵消) 思路 将原串变成“种类串”(例如:AABBAA—> ABA)后,“种类串”应当是回文串,且长度应该是奇数。 同时,一个可以被消去的串,根据中心对称的同类部分的长度和,应当>=3。中心部分长度应当>=2.满足以上条件,答案为中心部分答案+1; 代码 #include<iostream> #include&

Cosmic_Tree的博客 583

爱丽丝的人偶(二)-(排列组合-数学)

思路 去重,求组合数 c( len , k )(len为去重后的序列长度) (预处理组合数) 代码 #include<iostream> #include<string> #include<map> #include<set> //#include<unordered_map> #include<queue> #include<cstdio> #include<vector> #include<cstri.

Cosmic_Tree的博客 543
上一篇: 洛谷P1060 开心的金明(01背包)
下一篇: upc-WNJXYK and DIDIDI and monkey(并查集启发式合并)
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值