首页 > 其他分享 >DNA双序列对比

DNA双序列对比

时间:2024-07-24 20:29:57浏览次数:12  
标签:5000 return int io2 Seq2 序列 DNA Seq1 对比

#include<cstdio>
#include<cstring>
#include<bitset>
using std::bitset;

#define BOTH 0
#define S1 1
#define S2 2
const int Standard[4][4]=
{{10,-1,-3,-4},
 {-1,7,-5,-3},
 {-3,-5,9,0},
 {-4,-3,0,8}};
#define GAP -5
int Translate(char a)
{
	switch(a)
	{
		case 'A':	return 0;break;
		case 'G':	return 1;break;
		case 'C':	return 2;break;
		case 'T':	return 3;break;
	}
	return -1;
}

char io1[5000],io2[5000],*Seq1,*Seq2,Ans1[5000],Ans2[5000];
int Point[5000][5000];
bitset<5000> From[3][5000];//From[Seq1/Seq2?][x][y]
int Len1,Len2;
void Update(int x,int y,int&temp,int mode,int val)
{
	if(val>=temp)
		temp=val,
		From[BOTH][x][y]=false,
		From[S1][x][y]=false,
		From[S2][x][y]=false,
		From[mode][x][y]=true;
	return;
}
int GetPoint(int s1n,int s2n)
	{return Standard[Translate(Seq1[s1n])][Translate(Seq2[s2n])];}
char Out(int x,int y)
{
	if(From[BOTH][x][y])return '\\';
	if(From[S1][x][y])	return '-';
	if(From[S2][x][y])	return '|';
	return 'o';
}

int main()
{
	int temp=0;
	scanf("%s %s",io1,io2);
	Len1=strlen(io1);
	Len2=strlen(io2);
	if(Len1>Len2)	Seq2=io1,Seq1=io2,Len2=Len1,Len1=strlen(io2);
	else			Seq1=io1,Seq2=io2;
	//Seq1 short, Seq2 long

	Point[0][0]=0;
	for(int i=0;i<=Len1;i++)	Point[i][0]=0;
	for(int i=0;i<=Len2;i++)	Point[0][i]=0;
	for(int i=0;i<5000;i++)	Ans1[i]=Ans2[i]='\0';

	for(int i=1;i<=Len1;i++)
		for(int j=1;j<=Len2;j++)
		{
			temp=0;
			Update(i,j,temp,BOTH,Point[i-1][j-1]+GetPoint(i-1,j-1));
			Update(i,j,temp,S1,Point[i][j-1]+GAP);
			Update(i,j,temp,S2,Point[i-1][j]+GAP);
			Point[i][j]=temp;
		}

	int x=Len1,y=Len2,Pnt=0;
	while(x!=0&&y!=0)
	{
		if(From[BOTH][x][y])	x--,y--,Ans1[Pnt]=Seq1[x],Ans2[Pnt]=Seq2[y];
		else if(From[S2][x][y])	x--,Ans1[Pnt]=Seq1[x],Ans2[Pnt]='_';
		else if(From[S1][x][y])	y--,Ans1[Pnt]='_',Ans2[Pnt]=Seq2[y];
		else break;
		Pnt++;
	}
	while(x!=0||y!=0)
	{
		if(x==0)Ans1[Pnt]='_';
		else	Ans1[Pnt]=Seq1[--x];
		if(y==0)Ans2[Pnt]='_';
		else	Ans2[Pnt]=Seq2[--y];
		Pnt++;
	}

	for(int i=Pnt-1;i>=0;i--)	putchar(Ans1[i]);
	putchar('\n');
	for(int i=Pnt-1;i>=0;i--)	putchar(Ans2[i]);
	return 0;
}

标签:5000,return,int,io2,Seq2,序列,DNA,Seq1,对比
From: https://www.cnblogs.com/PCwqyy/p/18321649

相关文章

  • Python入门知识点 6--序列类型的方法
    1、初识序列类型方法序列类型的概念:数据的集合,在序列类型里面可以存放任意的数据也可以对数据进行更方便的操作这个操作就是叫增删改查(crud)(增加(Creat),读取查询(Retrieve),更新(Update),删除(Delete)几个单词的首字母简写)增删改查是操作数据最底层的操作(从本质......
  • 数字信号||离散序列的基本运算(2)
    实验二  离散序列的基本运算一、实验目的(1)进一步了解离散时间序列时域的基本运算。(2)了解MATLAB语言进行离散序列运算的常用函数,掌握离散序列运算程序的编写方法。二、实验涉及的MATLAB子函数1.find功能:寻找非零元素的索引号。调用格式:find((n>=min(n1))&(n<=max(n1)......
  • 数字信号||离散序列的基本运算(1)
    实验一 离散序列的基本运算一、实验目的(1)了解常用的时域离散信号及其特点。(2)掌握MATLAB产生常用时域离散信号的方法。二、实验涉及的MATLAB子函数1.axis功能:限定图形坐标的范围。调用格式:axis([x1,x2,y1,y2]);在横坐标起点为x1、终点为x2,纵坐标起点为y1、终点为y2的范围......
  • golang channel 和 mutex 及原子操作 用于并发控制的性能对比
    场景:对同个数加10w次,看耗费时间,这里没有用benchmark测试,在意的请略过。以下是测试代码:packagemainimport( "fmt" "sync" "sync/atomic" "testing" "time")funcTestCount(t*testing.T){ varcntint varwgsync.WaitGroup num......
  • 大语言模型对时间序列预测真的有用吗?
    我们已经看到了语言模型的巨大进步,但时间序列任务,如预测呢?今天我们推荐一篇论文,对现有的语言模型和时间序列做了深入的研究。将探讨了是否可以从大型语言模型(LLMs)中获益于时间序列(TS)预测。时间序列时间序列是机器学习中最具挑战性的工作领域之一,解决时间序列任务,如异常检测、时......
  • Django 序列化程序无法将查询集序列化为 JSON
    尝试简单的Django序列化器。我使用具有特定值的queryset然后我将queryset或queryset.values()传递给序列化器。为什么会出现500错误?@csrf_protectdefgeoLookup(request,**kwargs):country=kwargs.get('Country')city=kwargs.get('Place'......
  • jackson序列化(jackson codec)
    Jackson是一个用于Java平台的开源JSON库,它提供了灵活且高效的方式来处理JSON数据的序列化(Java对象→JSON字符串)和反序列化(JSON字符串→Java对象)。以下是Jackson的一些主要特点和功能:高性能:Jackson通过使用基于流的处理模型和性能优化技术,提供了出色的性能。它支......
  • 第四十七天 第九章 动态规划part13 647. 回文子串 516.最长回文子序列
    647.回文子串 dp和双指针。dp[i][j]的含义:表示区间范围[i,j](注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。在确定递推公式时,就要分析如下几种情况。整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的......
  • C++题目:DNA排序 代码
    题目描述现在有一些长度相等的 ......
  • Java 支持的数据类型与 MySQL 支持的数据类型对比
    Java支持的数据类型与MySQL支持的数据类型对比整数类型:Java:byte,short,int,longMySQL:TINYINT,SMALLINT,INT,BIGINT对应关系:byte对应MySQL的TINYINTshort对应MySQL的SMALLINTint对应MySQL的INTlong对应MySQL的BIGINT浮点数类型:Java......