【模拟】相似度 (similar.pas/c/cpp)

相似度
similar.pas/c/cpp

问题描述:

有两个长度相等的DNA序列(只包含A,T,G,C的字符串),我们想知道它的相似度,它的相似度是这样定义的。

首先相似度为0。

若在对应位置出现A与A,则相似度增加1513

若在对应位置出现A与T,则相似度增加666

若在对应位置出现T与T,则相似度增加2324

若在对应位置出现T与G,则相似度增加11

若在对应位置出现T与C,则相似度增加123

若在对应位置出现G与G,则相似度增加3999

若在对应位置出现G与C,则相似度增加521

若在对应位置出现G与A,则相似度增加423

若在对应位置出现C与C,则相似度增加4423

若在对应位置出现C与A,则相似度增加2

 

输入:

第一行一个数n,表示DNA序列的长度。

第二,三行分别有一个长度为n的字符串,表示两个DNA序列。

 

输出:

一个整数ans,表示相似度。

 

输入样例:

4

ATGC

ATGC

 

输出样例:

12259

 

数据范围:

n<=1000000

 

 

这一题没什么算法可言,主要注意A-T和T-A这些都是一种情况,直接4*4=16个 if 就可以解决问题

如果嫌16个 if 的程序不好看的话,可以写一个模块,然后在模块里面把小的排前面,比如T-A就处理成A-T,然后也需要4+3+2+1=10个 if 语句

如果还觉得不好看,这里推荐一种在usaco中学到的方法,把ATCG分别用1,2,4,8标号,那么任意两个相加的和都不同,就可以预处理出来,然后直接用即可,有兴趣的可以自己试试

C++ Code

/*
C++ Code
http://oijzh.cnblogs.com
*/
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define MAXN 1000010

typedef long long LL;
char a[MAXN],b[MAXN];
int n;

int main()
{
    freopen("similar.in","r",stdin);
    freopen("similar.out","w",stdout);
    scanf("%d",&n);
    gets(a);//跳过空行
    gets(a);gets(b);
    LL ans=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]=='A')
        {
            if(b[i]=='A'){ans+=1513;continue;}
            else if(b[i]=='T'){ans+=666;continue;}
            else if(b[i]=='G'){ans+=423;continue;}
            else if(b[i]=='C'){ans+=2;continue;}
        }
        else if(a[i]=='T')
        {
            if(b[i]=='A'){ans+=666;continue;}
            else if(b[i]=='T'){ans+=2324;continue;}
            else if(b[i]=='G'){ans+=11;continue;}
            else if(b[i]=='C'){ans+=123;continue;}
        }
        else if(a[i]=='G')
        {
            if(b[i]=='A'){ans+=423;continue;}
            else if(b[i]=='T'){ans+=11;continue;}
            else if(b[i]=='G'){ans+=3999;continue;}
            else if(b[i]=='C'){ans+=521;continue;}
        }
        else if(a[i]=='C')
        {
            if(b[i]=='A'){ans+=2;continue;}
            else if(b[i]=='T'){ans+=123;continue;}
            else if(b[i]=='G'){ans+=521;continue;}
            else if(b[i]=='C'){ans+=4423;continue;}
        }
    }
    cout<<ans;
    return 0;
}

  

 

转载于:https://www.cnblogs.com/oijzh/archive/2012/10/22/2733280.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: https://github.com/lan-cz/cnn-matching 是一个在GitHub上的开源项目,它实现了卷积神经网络(CNN)进行匹配任务的算法。 这个项目的主要目的是提供一个可用的CNN匹配模型框架,以便于研究人员和开发者可以使用和扩展。使用这个项目,可以快速构建和训练一个CNN模型来进行匹配任务,例如图像匹配、目标检测、物体识别等。 该项目的代码基于Python编写,并使用了常见的深度学习库,如TensorFlow和Keras。这些库提供了直观易用的接口,使得构建和训练CNN模型变得更加方便。此外,该项目还提供了一些示例数据和训练脚本,可以帮助用户更好地理解和使用这个框架。 通过这个项目,用户可以学习和掌握CNN模型在匹配任务中的应用。可以根据自己的需求,定制和调整模型的架构和参数,以获得最佳的性能。此外,也可以使用这个项目进行实验和研究,探索CNN匹配模型的各种应用和改进方法。 总之,https://github.com/lan-cz/cnn-matching 提供了一个方便、易用的CNN匹配模型框架,适用于各种匹配任务。通过这个项目,用户可以快速构建和训练CNN模型,从而实现高性能的匹配结果。 ### 回答2: https://github.com/lan-cz/cnn-matching 是一个GitHub上的开源项目,名称为cnn-matching。这个项目通过使用卷积神经网络(CNN)来实现图像的匹配和对齐功能。 该项目的主要目标是利用深度学习的方法,对给定的图像进行特征提取和相似度计算,以实现图像的匹配。在该项目中,CNN作为主要的算法,用于提取图像的特征信息。 对于图像的匹配和对齐,首先需要通过CNN对输入的图像进行处理,从而得到图像的特征向量。这些特征向量将用于比较两个图像的相似性,并计算它们之间的匹配程度。通过比较不同图像之间的特征向量,可以得出它们之间的相似度分数,从而进行图像的匹配和对齐。 这个项目在处理图像匹配和对齐问题方面具有很大的潜力。通过使用CNN提取特征,可以较好地捕捉到图像的语义信息,从而提升匹配和对齐的准确性。同时,该项目的开源性质也使得其他研究者和开发者可以共同参与,不断改进和优化算法。 总之,https://github.com/lan-cz/cnn-matching 是一个开源的图像匹配和对齐项目,利用了卷积神经网络(CNN)提取图像特征,并计算图像的相似度。这个项目有望进一步推动图像匹配和对齐领域的发展,并为相应的研究和应用提供支持。 ### 回答3: https://github.com/lan-cz/cnn-matching是一个Github上的项目,该项目的主要目标是通过卷积神经网络(CNN)来实现图像匹配的功能。 这个项目中的CNN模型是通过使用Python编程语言和深度学习库Keras实现的。CNN是一种经典的深度学习模型,常用于图像识别和图像匹配等任务。通过卷积操作和池化操作,CNN可以有效地提取图像中的特征,从而实现图像分类和匹配的功能。 在这个项目中,开发者首先使用Python读取和处理输入的图像数据,然后将数据输入到CNN模型中进行训练。通过多次迭代训练,CNN模型可以学习到图像中的特征,并将其编码为一组数值。然后,通过比较不同图像的特征编码,可以计算它们之间的相似度,从而实现图像匹配的功能。 除了CNN模型,这个项目中还包括一些辅助工具和函数,用于数据处理、模型评估和结果可视化等任务。开发者可以根据自己的需求进行调整和修改,以便更好地适应不同的图像匹配场景。 总的来说,这个https://github.com/lan-cz/cnn-matching项目提供了一个基于CNN的图像匹配解决方案,可以帮助开发者在图像识别和图像匹配等任务中取得更好的效果。如果你对图像匹配感兴趣,可以参考该项目的代码和文档,了解更多相关的知识和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值