脱水缩合

        一道比较普通的字符串题

与之前的一道题字串变换类似

  传送门:字串变换

大意 :给定一些替换规则,可以使特定的两个字符变为一个特定字符,问使其变化为一个 单字符 ‘a‘ 的方案数有几个。

  思路 :由于 n 的范围很小,可以考虑生成 n 的所有排列情况,再进行判断 & 搜索。

搜索的策略也比较简单,由于 提议限制为特定的两个字符 变换为 一个字符,所以可以直接打出这种情况。注意回溯时 要先把 要替换的字符取出,替换上可替换的字符,判断是否符合要求, 若不符合,则再把取出的字符放回去。

  

#include <iostream>
#include <cstdio>
#define Max 30
using namespace std;
char merge_from [Max][Max];
char merge_to [Max][Max];
char merge [Max];
int N, Q;
int  Answer ;
bool judge (int X)
{
    if (X == N && merge [X] == ‘a‘) return true;   // 如果串的长度已经到了给定的长度,且最后一个字符为a,则证明该串是符合要求的
    for (int i = 1; i <= Q; i++)
    {
        if (merge [X] == merge_from [i][1] && merge [X + 1] == merge_from[i][2])  //如果当前串的当前字符符合第i个可缩合的规则
        {
            char just = merge [X + 1];       //取出待替换的字符,准备若替换后不成功的话再放回去
            merge [X + 1] = merge_to [i][1];    //替换
            bool flag = judge (X + 1);            //判断接下来的字符
            merge [X + 1] = just;                // 把 取出的字符再放回去
            if (flag == true) return true;        // 如果该串符合要求,则返回一个true
        }
    }
}
void DFS (int X)
{
    if (X == N + 1)
    {
        if(judge (1) == true)   // 从当前生成的串的第一个字符开始判断
            Answer++;          //如果 符合要求 答案加1
        return;              //返回
    }
    for (int i = 0; i <= 5; i++)   // 枚举每一种 串的排列方式
    {
        merge [X] = i + ‘a‘;
        DFS (X + 1);
    }
}
int main()
{
    ios :: sync_with_stdio (false);
    scanf ("%d%d", &N, &Q);
    for (int i = 1; i <= Q; i++)
    {
        scanf ("%s", merge_from [i] + 1);   // 读入 缩合规则       + 1 的目的是使字符串从下标为1开始存
        scanf ("%s", merge_to [i] + 1);        // 读入 缩合后的氨基酸
    }
    DFS (1);        // 从第一种串的情况开始搜索
    printf ("%d", Answer );
    return 0;
}
时间: 2024-11-03 21:40:44

脱水缩合的相关文章

NOIP2016 模拟赛

——那些年,我们学过的文化课 考场得分140分. 背单词 (word.c/cpp/pas) [题目描述] fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单 词. 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好, 于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行 m 列的 表格里,然后每天背一行或者背一列.他的复习计划一共有 k 天,在 k 天后, fqk 想知道,这个表格中的每个单词,最后一次背是在哪一 天呢? [输入格式] 第一行三个整数 k m n

氨基酸

https://zh.wikipedia.org/zh/%E6%B0%A8%E5%9F%BA%E9%85%B8 氨基酸(英文:Amino acid)是生物學上重要的有機化合物,它是由胺(-NH2)和羧酸(-COOH)的官能團組成的,以及一個側鏈连到每一個氨基酸.氨基酸是構成蛋白質的基本單位,賦予蛋白質特定的分子結構形態,使他的分子具有生化活性.蛋白質是生物体內重要的活性分子,包括催化新陳代謝的酶(又称“酵素”). 不同的氨基酸脱水缩合形成肽(蛋白質的原始片段),是蛋白質生成的前體. 目录 1 基

20161109模拟赛解题报告

2016-11-09试题解题报告 By shenben 本解题报告解析均为100分解题思路. T1 模拟即可. 我怕极限数据5000(n,m)*100000(k). 如果用二维数组.空间勉强撑住,时间上够呛. 因此用2个一位数组分别代表行和列. 这样每次修改是O(1)的. 查询是O(nm)(只查询一次) 总时间复杂度:O(nmk) T2 搜索 一开始想偏了. 倒着由“a”往前推.结果小样例过了,大样例差太多. 于是另辟蹊径. 观察到数据范围很小. 直接枚举答案序列不就好了. 对于每个序列再判断一

U2.2生命活动的主要承担者--蛋白质

重点: 1.蛋白质 组成,多样化,合成 2.氨基酸 结构通式,20种氨基酸分子式,连接方法 3.蛋白质多样化原因 不懂: 羧基,氨基,脱水缩合,肽键,二钛,多肽 词汇: protein 蛋白质 Protein is a substance found in food and drink such as meat, eggs, and milk. You need protein in order to grow and be healthy. amino acid氨基酸[?,mi:n?u 'æs

7.22测试

NOIP2016 模拟赛 ——那些年,我们学过的文化课 1.背单词 (word.c/cpp/pas) [题目描述] fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单 词. 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好, 于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行 m 列的 表格里,然后每天背一行或者背一列.他的复习计划一共有 k 天,在 k 天后, fqk 想知道,这个表格中的每个单词,最后一次背是在哪一 天呢? [输入格式] 第一行三个整数

核糖体

https://zh.wikipedia.org/wiki/%E6%A0%B8%E7%B3%96%E4%BD%93 规范控制 NDL: 00569445 典型的细胞图解,其中显示了几种主要细胞器及一些重要细胞结构:1.核仁 2.细胞核 3.核糖体4.囊泡 5.糙面内质网 6.高尔基体 7.细胞骨架8.光面内质网 9.线粒体 10.液泡 11.细胞质12.溶酶体 13.中心粒 核糖体,旧称“核糖核蛋白体”或“核蛋白体”,是细胞中的一种细胞器[1][注 1],由一大一小两个亚基结合形成[2],主要成

U2.4细胞中的糖类

大纲: 1.词汇 1.词汇 carbohydrate[kɑ?b?'ha?dre?t] an essential structural component of living cells and source of energy for animals; includes simple sugars with small molecules as well as macromolecular substances; are classified according to the number of

COGS2259 异化多肽

题面 题目描述 多肽是α-氨基酸以肽键连接在一起而形成的化合物,它也是蛋白质水解的中间产物.由两个氨基酸分子脱水缩合而成的化合物叫做二肽,同理类推还有三肽.四肽.五肽等.通常由三个或三个以上氨基酸分子脱水缩合而成的化合物都可以成为叫多肽. 为了计算病毒结构与蛋白质性质,现取出M种氨基酸混合,已知其相对分子质量分别为C1,C2,C3--,经过精密的脱水缩合后形成了大量各种各样的肽链.需要预测有多少种多肽链水解后相对分子质量和为N.(A-B-C与C-B-A两条肽链视为不同) 输入格式 第一行两个整数

English trip V2 - 11 Health and Well-being 健康和幸福 Teacher:Ginny Key: Verb + gerund(-ing) &amp; verb + infinitive 动名词 &amp; 动词+原型

In this lesson you will learn how to talk about health and well-being. 课上内容(Lesson) What do you  do to stay healthy?  你做什么才能保持健康? We are more drinking water in the ever morning is good for our healthy What are some bad habits that you have?  你有一些什么坏习