T89353 【BIO】RGB三角形
2024-09-05 10:42:10
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=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,len,m;
int l[]={,,,,,,,,,,,,,,};
string s; int main()
{
// freopen("t5.in","r",stdin);
// freopen("yy.txt","w",stdout); n=read();m=n;
cin>>s;
if(n==)
{
cout<<s[];
return ;
}
while(m)
{
for(int i=;i<;i++)
{
if(l[i]<=m) len=l[i];
else break;
}
if(len==m)
{
char a1=s[],a2=s[m-],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 ;
}
for(int i=;i<m-len+;i++ )
{
char a1=s[i],a2=s[i+len-];
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-);
} cout<<s[]; return ;
}
最新文章
- laravel5.1学习(2)-- artisan tinker命令
- python中遍历文件的3个方法
- linux概念之内存分析
- html初学(一)
- 关于J-LINK升级最新固件后无法连上的一点分析
- spring aop实现原理
- 【Leetcode】查找二叉树中任意结点的最近公共祖先(LCA问题)
- nyoj 228 士兵杀敌(五)
- HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
- GString及IntelliJIdea中调试Groovy的操作步骤
- Tair总述
- bzoj 4556 字符串
- 关于阿里ICON矢量图(SVG)上传问题.
- php实现栈操作(不用push pop 库函数)
- 第一个Azure应用
- C# 将当前应用程序写入到注册表开机启动项中
- Codeforces 215D. Hot Days(贪心)
- 面向对象的编程思想和Java中类的概念与设计
- DotNetCore学习-3.管道中间件
- xml和对象 转换