zoukankan      html  css  js  c++  java
  • T89353 【BIO】RGB三角形

    T89353 【BIO】RGB三角形

    题解

    对于这个题目有一个规律:

           如果一个数列的长度为 3k+1(0<=k) 那么,这个数列最终缩放成的一个字母只和这个数列的首项,尾项有关

    所以我们可以先判断输入的这个数列长度是否为 3k+1(0<=k) ,如果是,那就直接处理好了

    否则就找到一个最大的 3k+1,然后把这个数列划分成更多的这么长的小区间,一点点处理

    每次处理后序列长度都会缩短,那么相应的 3k+1也要更新

    最后处理到只剩下一个字母啦,就是答案了

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    
    using namespace std;
    
    inline int read()
    {
        int ans=0;
        char last=' ',ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    int n,len,m;
    int l[20]={2,4,10,28,82,244,730,2188,6562,19684,59050,177148,531442,1594324,4782970};
    string s;
    
    int main()
    {
    //    freopen("t5.in","r",stdin);
    //    freopen("yy.txt","w",stdout);
        
        n=read();m=n;
        cin>>s;
        if(n==1) 
        {
            cout<<s[0];
            return 0;
        }
        while(m)
        {
            for(int i=0;i<15;i++)
            {
               if(l[i]<=m) len=l[i];
               else break;
            }
            if(len==m)
            {
               char a1=s[0],a2=s[m-1],a3;        
               if(a1==a2) a3=a1;
               if((a1=='R'&&a2=='G')||(a1=='G'&&a2=='R')) a3='B';
               if((a1=='R'&&a2=='B')||(a1=='B'&&a2=='R')) a3='G';
               if((a1=='B'&&a2=='G')||(a1=='G'&&a2=='B')) a3='R';
               cout<<a3<<endl;
               return 0;
            }
            for(int i=0;i<m-len+1;i++ )
            {
                char a1=s[i],a2=s[i+len-1];        
                if(a1==a2) s[i]=a1;
                if((a1=='R'&&a2=='G')||(a1=='G'&&a2=='R')) s[i]='B';
                if((a1=='R'&&a2=='B')||(a1=='B'&&a2=='R')) s[i]='G';
                if((a1=='B'&&a2=='G')||(a1=='G'&&a2=='B')) s[i]='R';
            }
            m-=(len-1);
        }
        
        cout<<s[0];
    
        return 0;
    }
  • 相关阅读:
    Linux shell 学习总结
    linux shell 比较总结
    NSURL基本操作 HA
    Mac node.js install HA
    nodejs学习资料收集 HA
    xcode技巧 HA
    google web app/enxtions 学习资料收集 HA
    Failed to upload *.app on Device 可能的解决方法 HA
    iphone开发常见问题小集2 HA
    cocos2d收集 HA
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11237632.html
Copyright © 2011-2022 走看看