• 洛谷 P2562 [AHOI2002]Kitty猫基因编码


    题目描述

    小可可选修了基础生物基因学。教授告诉大家 Super Samuel 星球上 Kitty猫的基因的长度都是 2 的正整数次幂 ), 全是由两种不同的基因单元组成的。 这两种不同的基因单元分别记成 0 和 1,于是 Kitty 猫基因可以写成一个 01 串表达式 。

    为了便于分析和降低数据存储量,教授发明了 ABC 编码规则。该编码规则是不断地按照

    对 Kitty 猫基因 01 串表达式 进行改写, 直至最终被改写成只含有字符 “ A”、“ B”、“ C”的符号串。

    请你编写程序帮助小可可求出 Kitty 猫基因的 ABC 编码以协助教授开展科研工作。

    输入输出格式

    输入格式:

     

    文件中以一行的形式存放了一个 Kitty 猫基因的 01 串表达式。

     

    输出格式:

     

    以一行的形式输出这个 Kitty 猫基因的 ABC 编码。

     

    输入输出样例

    输入样例#1: 复制
    00
    输出样例#1: 复制
    A
    输入样例#2: 复制
    01001011
    输出样例#2: 复制
    CCCABACCBAB
    思路:递归
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int len;
    char s[100000];
    int judge(int l,int r){
        int sum0=0,sum1=0;
        for(int i=l;i<=r;i++)
            if(s[i]=='0')    sum0++;
            else sum1++;
        if(sum0==r-l+1)    return 1;
        else if(sum1==r-l+1)    return 2;
        else return 0;
    }
    void dfs(int l,int r){
        if(judge(l,r)==1){ cout<<"A";return ; }
        else if(judge(l,r)==2){ cout<<"B";return ; }
        else{
            cout<<"C";
            dfs(l,(l+r)/2);
            dfs((l+r)/2+1,r);
        }
    }
    int main(){
        scanf("%s",s);
        len=strlen(s);
        if(judge(0,len-1)==1){ cout<<"A";return 0; }
        else if(judge(0,len-1)==2){ cout<<"B";return 0; }
        else{
            cout<<"C";
            dfs(0,(len-1)/2);
            dfs((len-1)/2+1,len-1);
        }
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    shell基础--变量的数值计算
    shell基础--字符串和变量的操作
    shell基础--shell特殊变量
    Asp.net MVC 控制器扩展方法实现jsonp
    ASP.NET web api 跨域请求
    asp.net Web API简单的特性路由配置
    ASP.Net Web API 输出缓存 转载 -- Output caching in ASP.NET Web API
    基础拾遗 C# Json 与对象相互转换
    内存溢出和内存泄漏
    软件测试面试题(一)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7887314.html
Copyright © 2020-2023  润新知