zoukankan      html  css  js  c++  java
  • P2562kitty猫基因

    这道题是安徽NOI省选题,但是难度并没有那么难。

    这道题是一个字符串的递归题,有很多大佬用线段树来写的(我也想学线段树,lowbit当头一棒)。题意为全部相同则输出B或A,不同则分成长度相同的两个子串,并输出C。看到这个便很容易想到递归加二分,但是如何去写上面的函数呢?我顿时想退缩,然后得出策略:枚举子串,假如有不同的则递归二分输出C,直到相同输出A、B。

    1.避免出现低级错误,eg.string s[],(mid+1,left),,会耽误很多调试时间

    2.熟练运用递归的二分

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #define N 100001
    using namespace std;
    string s;//!
    bool flag;
    void work(int left,int right){
        flag=true;
        int mid=(left+right)/2;
        for(int i=left+1;i<=right;i++){
            if(s[i]!=s[i-1]){
                flag=false;
                break;
            }
        }
        if(flag==false){
            cout<<"C";
            work(left,mid);
            work(mid+1,right);//!
            return;
        }    
        if(flag==true){
            if(s[left]=='0') cout<<"A";
            else if(s[left]=='1') cout<<"B";
        }
        return;
    }
    int main(){
        cin>>s;
        int len=s.length();
        work(0,len-1);//!
        return 0;
    } 
    待到oi十一月,我花开后百花杀。
  • 相关阅读:
    java实现万年历
    java中关于Calendar
    java中各种类型的输入输出
    java(向上向下转型)
    MyEclipse还原默认窗口
    Hibernate映射问题之OneToOne【自己整理】
    Neither BindingResult nor plain target object for bean
    剑宗与气宗
    分治算法
    spring处理线程并发
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11246317.html
Copyright © 2011-2022 走看看