脱水缩合(大搜索)

脱水缩合


(merge.c/cpp/pas)


【题目描述】


fqk 退役后开始补习文化课啦, 于是他打开了生物必修一开始复习
蛋白质,他回想起了氨基酸通过脱水缩合生成肽键,具体来说,一个
氨基和一个羧基会脱去一个水变成一个肽键。于是他脑洞大开,给你
出了这样一道题:


fqk 将给你 6 种氨基酸和 m 个脱水缩合的规则,氨基酸用
' ' , ' ' , ' ' , ' ' , ' ' , ' ' f e d c b a 表示,每个规则将给出两个字符串 t s, ,其中
1 | | , 2 | |   t s ,表示 s 代表的两个氨基酸可以通过脱水缩合变成 t 。然后
请你构建一个长度为 n ,且仅由 ' ' , ' ' , ' ' , ' ' , ' ' , ' ' f e d c b a 构成的氨基酸序列,
如果这个序列的前两个氨基酸可以进行任意一种脱水缩合, 那么就可
以脱水缩合,脱水缩合后序列的长度将 1  ,这样如果可以进行 1  n 次
脱水缩合,最终序列的长度将变为 1 ,我们可以认为这是一个蛋白质,
如果最后的蛋白质为 ' 'a , 那么初始的序列就被称为一个好的氨基酸序
列。 fqk 想让你求出有多少好的氨基酸序列。


注:题目描述可能与生物学知识有部分偏差(即氨基酸进行脱水
缩合后应该是肽链而不是新的氨基酸),请以题目描述为准。


【输入格式】


第一行两个整数 q n, 。
接下来 q 行,每行两个字符串 t s, ,表示一个脱水缩合的规则。


【输出格式】


一行,一个整数表示有多少好的氨基酸序列。


【输入样例】


3 5
ab a
cc c
ca a
ee c
ff d


【输出样例】


4


【样例解释】


一共有四种好的氨基酸序列,其脱水缩合过程如下:
"abb" "ab" "a"
"cab" "ab" "a"
"cca" "ca" "a"
"eea" "ca" "a"


【数据范围】


对于 % 100 的数据, 36 , 6 2    q n 。数据存在梯度。


【时空限制】


对于每个测试点,时间限制为 s 2 ,空间限制为 MB 512 。

 

 

思路:

  纯搜索题

  我们从"a"开始搜索,每次搜到长度等于n的序列就return

  不需要判断这个序列是否合法

  因为就是从"a"出来的

  这个序列一定合法的

  唯一需要判定的就是是否重复

  判断是否重复最好用bfs写

  而且这个题的数据范围特别小

  但是

  当时脑抽不知道怎么着就写了个dfs

  按理说dfs是能过的

  但是脑子又抽了一下

  判断还放在了return的后面

  天啊,50分就这么没了

  要不是这数据水我就爆零了

  这告诉我们脑子是个好东西

  所以

  以后写搜索一定要先判断是否重复

 

 

来,上代码:

(附两个代码,一个是dfs(虽然标解就是dfs),另一个是bfs)

dfs:

#include<map>
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>using namespace std;struct node {string from,to;int next;
};
struct node edge[40];int n,q,num;long long int ans=0;string cur,kol;map<char,int>head;
map<string,bool>pd;void edge_add(string from,string to)
{num++;edge[num].to=to;edge[num].from=from;edge[num].next=head[from[0]];head[from[0]]=num;
}void dfs(string kcc,int now)
{if(pd[kcc]==true) return ;if(now==n){//cout<<kcc<<endl;ans++;return ;}string kll=kcc;for(int i=head[kcc[kcc.length()-1]];i!=0;i=edge[i].next){string::iterator it=kcc.end()-1;kcc.erase(it);kcc+=edge[i].to;dfs(kcc,now+1);pd[kcc]=true;kcc=kll;}
}int main()
{scanf("%d%d",&n,&q);n--;for(int i=1;i<=q;i++){cin>>cur>>kol;swap(cur[0],cur[1]);edge_add(kol,cur);}dfs("a",0);cout<<ans<<endl;return 0;
}

 

bfs:

#include<map>
#include<queue>
#include<cmath>
#include<cstdio>
#include<string>
#include<iostream>using namespace std;struct node {string from,to;int next;
};
struct node edge[1000];int n,q,num;long long int ans=0;string cur,kol;map<char,int>head;
map<string,bool>pd;queue<string>que;void edge_add(string from,string to)
{num++;edge[num].to=to;edge[num].from=from;edge[num].next=head[from[0]];head[from[0]]=num;
}void bfs()
{string start="a";que.push(start);pd[start]=true;while(!que.empty()){cur=que.front();for(int i=head[cur[cur.length()-1]];i!=0;i=edge[i].next){kol=que.front();string::iterator it=kol.end()-1;kol.erase(it);kol+=edge[i].to;if(pd[kol]==false){pd[kol]=true;if(kol.length()>=n) ans++;else que.push(kol);}}que.pop();}
}int main()
{scanf("%d%d",&n,&q);for(int i=1;i<=q;i++){cin>>cur>>kol;swap(cur[0],cur[1]);edge_add(kol,cur);}bfs();cout<<ans<<endl;return 0;
}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6048288.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu16.04下安装NS-2.35以及对simple例的理解

本人是在VMWare上安装的ubuntu16.04版本&#xff0c;然后安装NS2.35. 1.下载ns2的安装包&#xff0c;这里我选择的是ns-allinone-2.35.tar.gz压缩格式的all in one安装包&#xff0c;all in one 安装包包含所有的组件&#xff0c;比较方便&#xff0c;另附下载地址&#xff1a;…

linux查看登录服务器的ip历史记录,通过登陆IP记录Linux所有用户登录所操作日志的方法...

对于Linux用户操作记录一般通过命令history来查看历史记录&#xff0c;但是如果在由于误操作而删除了重要的数据的情况下&#xff0c;history命令就不会有什么作用了。那么依然要存有历史操作记录应该如何来实现呢&#xff1f;其实我们可以通过登陆IP地址来记录所有用户登录所操…

linux 向程序发送信号,Linux下的信号处理

Linux下的信号处理发布时间:2006-01-02 09:34:14来源:红联作者:reing前言&#xff1a;这一章我们讨论一下Linux下的信号处理函数。Linux下的信号处理函数&#xff1a;信号的产生信号的处理其它信号函数一个实例1.信号的产生Linux下的信号可以类比于DOS下的INT或者是Windows下的…

思科模拟器:[1]安装及汉化详解

思科模拟器是网络工程师经常使用的网络实验模拟软件&#xff0c;它可以很快捷的模拟网络中的各种设备(交换机、路由器、台式电脑、笔记本电脑、服务器、网络云)&#xff0c;搭建各种网络环境&#xff0c;模拟网络拓扑结构等。下面天使图文教程&#xff0c;告诉大家怎么安装这个…

linux中的加法函数,上下文管理练习(为加法函数计时)

上下文管理(为加法函数计时)为加法函数计时使用装饰器显示该函数的执行时长使用上下文管理显示该函数的执行时长装饰器实现import timeimport datetimefrom functools import wrapsdef logger(fn):wraps(fn) # wraps(fn)(wrapper)def wrapper(*args, **kw):start datetime.dat…

07数组与接口

1、运行TextInherists.java 示例&#xff0c;观察输出&#xff0c;注意总结父类与子类之间构造方法的的调用关系&#xff0c;修改parent构造方法的代码&#xff0c;显式调用grandparent另一个构造函数。 源代码&#xff1a; class GrandParent{ public GrandParent(){ System.o…

windows 访问linux中的mongodb,MongoDB的linux系统下的安装与连接

一 安装MongoDB的服务下载Linux系统下的MongoDB安装包上传压缩包到linux服务器中&#xff0c;解压到对应的安装目录下mkdir /usr/local/mongodbtar -zxvf mongodb-linux-x86_64-4.0.10.tgzmv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb新建目录&#xff0c;分别用来存储数…

像阿超那样,花20分钟写一个能自动生成小心四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算。 和同学们比较一下各自程序的功能,实现方法的异同,等等...

package chapter;public class szys { public static void main(String[] args) { print30Questions(); } private static void print30Questions() { //说明&#xff1a;打印30道题函数&#xff0c;把接收到的题目字符串按照指定格式输出。…

linux sqlserver 管理工具,Linux连接SqlServer的图形化工具SQuirrel

SQuirrel SQL一款基于java的数据库管理工具。所以可以运行在任意平台上&#xff0c;除了界面丑一点。在windows上我绝对不会选的&#xff0c;navicat多好。安装下载地址&#xff1a;https://sourceforge.net/projects/squirrel-sql/?sourcetyp_redirect在控制台运行&#xff1…

【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.

// 复制数据至剪切板BOOL CopyToClipboard(const char* pszData, const int nDataLen){ if(::OpenClipboard(NULL)) { ::EmptyClipboard(); HGLOBAL clipbuffer; char *buffer; clipbuffer ::GlobalAlloc(GMEM_DDESHARE, nDataLen1); …

linux中sort命令实例,Linux命令之排序命令sort使用实例

名称&#xff1a;sort位置&#xff1a;/usr/bin/sort权限&#xff1a;所有用户用法&#xff1a; sort [OPTION]... [FILE]...sort [OPTION]... --files0-fromF选项&#xff1a;-b --ignore-leading-blanks 忽略最前面的空格-f --ignore-case fold lower case to…

JDK源码包结构分类

最近查看JDK源码时&#xff0c;无意间发现几个类在陌生包里&#xff1a;com.sun.*、sun.*、org.*&#xff0c;google了一把总结了下以备他人搜索&#xff0c;如内容有误欢迎指正&#xff01;Jre库包含的jar文件(jdk1.6)&#xff1a;resources.jar、rt.jar、jsse.jar、jce.jar、…

linux帮助命令和用法,Linux命令帮助及history命令的使用

1.Linux命令帮助的获取详解在Linux中获取命令帮助时&#xff0c;内部命令和外部命令的获取方式是有区别的&#xff1a;即(1)内部命令&#xff1a;#help COMMAND? #man bash(2)外部命令&#xff1a;<1> # COMMAND --help# COMMAND -h<2> 使用手册(manu…

GJM :Sql 各种语句 以及函数 [转载]

版权声明&#xff1a;本文原创发表于 【请点击连接前往】 &#xff0c;未经作者同意必须保留此段声明&#xff01;如有侵权请联系我删帖处理&#xff01;1.更改数据库的名称 2.表中有数据的情况下再添加列、删除列 3.在SQLServer 中各种查询语句的使用示例 4.模糊查询的语句 5.…

linux中断处理体系结构分析(一),Linux中断处理体系结构分析(二)

1.中断处理的体系结构我们知道编写设备驱动程序一定要用到中断处理函数&#xff0c;这在驱动程序的编写中&#xff0c;占据很重要的一部分。在响应一个特定的中断的时候&#xff0c;内核会执行一个函数&#xff0c;该函数叫做中断处理程序(interrupt handler)或中断服务例程(in…

c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案

数据结构(C语言版)第五六章习题答案,人民邮电出版社,答案很详细。(15)设F是一个森林&#xff0c;B是由F变换得的二叉树。若F中有n个非终端结点&#xff0c;则B中右指针域为空的结点有( )个。A&#xff0e; n-1 B&#xff0e;n C&#xff0e; n1 D&#xff0e; n22&#xff0e;应…

福州大学c语言考试答案,C语言练习模拟考福州大学工程技术学院.doc

C语言练习模拟考福州大学工程技术学院.doc1 课程课程 专业专业 姓名姓名 学号学号 总评成绩总评成绩 一、单选题一、单选题将将正确正确选项选项的的字母字母填在填在答题答题纸纸上上。每小题。每小题 1 1 分&#xff0c;共分&#xff0c;共 2 25 5 分分) ) 1 1在计算机上可以…

Android中土司(Toast)的使用

Android中Toast的使用 什么是土司(Toast)? Toast是Android系统提供的一种非常好的提示方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何的屏幕空间. 下面我们通过代码来体验一下土司在Android中的使用 1 import android.a…

atoll找不到标识符c语言,C/C++编程笔记:C++中的atol,atoll和atof函数

1、atol()此函数将作为参数传递给函数调用的C类型字符串转换为长整数。它解析C字符串str&#xff0c;将其内容解释为整数&#xff0c;并作为long int类型的值返回。该函数丢弃出现在字符串开头的空白字符&#xff0c;直到找到非空白字符为止。如果C字符串str中的非空白字符序列…

cvc个人记录[为了方便以后查看]

1、摄中拍是需要要求的&#xff0c;图像帧数太快不能进行摄中拍