首页 > 其他分享 >CodeForces 1108C Nice Garland(DFS)

CodeForces 1108C Nice Garland(DFS)

时间:2023-05-26 15:02:40浏览次数:50  
标签:1108C ll CodeForces dfs 1000001 ++ flag DFS include


传送门

题目大意就是给你一个由'R','G','B'三个字母组成的字符串,然后这个字符串需要满足任意相邻的三个字符不能相同,如果不满足则需要你对其进行更改,然后输出更改的次数和更改完的字符串。

具体的思路就是枚举"RGB"这三个的组合,显然只有3!个,然后依次计算步数

代码如下

#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
typedef long long ll;
using namespace std;
char a[1000001],s[1000001],ans[1000001];
ll n,minn = 1ll << 60;
void cpt()
{
	for(ll i = 3;i < n;i += 3)
	{
		a[i] = a[0],a[i + 1] = a[1],a[i + 2] = a[2];
	}
	ll cnt = 0;
	for(ll i = 0;i < n; ++i)
	{
		if(a[i] != s[i])
            ++cnt;
	}
	if(cnt < minn)
	{
		minn = cnt;
		for(ll i = 0;i < n; ++i)
            ans[i] = a[i];
	}
}
void dfs(ll x)
{
	if(x > 2)
	{
		cpt();
		return;
	}
	bool flag = 1;
	for(ll i = 0;i < x; ++i)
		if(a[i] == 'R')
            flag = 0;
	if(flag)
	{
		a[x] = 'R';
		dfs(x + 1);
	}
	flag = 1;
	for(ll i = 0;i < x; ++i)
		if(a[i] == 'G')
            flag = 0;
	if(flag)
	{
		a[x] = 'G';
		dfs(x + 1);
	}
	flag = 1;
	for(ll i = 0;i < x; ++i)
		if(a[i] == 'B')flag = 0;
	if(flag)
	{
		a[x] = 'B';
		dfs(x + 1);
	}
}
int main()
{
	cin >> n >> s;
	dfs(0);
	cout << minn << endl;
	for(ll i = 0;i < n; ++i)
        putchar(ans[i]);
	return 0;
}

 

标签:1108C,ll,CodeForces,dfs,1000001,++,flag,DFS,include
From: https://blog.51cto.com/u_16131191/6356126

相关文章

  • Codeforces Round #552 (Div. 3) 1154
    A:传送门就是解个方程,也没什么说的#include<bits/stdc++.h>usingnamespacestd;intmain(){inta[4],x,b,c;for(inti=0;i<4;i++)cin>>a[i];sort(a,a+4);c=a[3]-a[0];x=a[1]-c;b=a[2]-c;cout<<x......
  • hdfs文件上传打包及bug汇总
    1、错误:找不到或无法加载主类删除META-INFO下的.DSA和.SF文件即可来源csdn文章2、ERRORorg.apache.hadoop.fs.UnsupportedFileSystemException:NoFileSystemforscheme"file"ConfigurationlocalConf=newConfiguration();//ERRORorg.apache.h......
  • Educational Codeforces Round 149 (Rated for Div. 2)
    EducationalCodeforcesRound149(RatedforDiv.2)A-GrasshopperonaLine思路:只有两种情况,x整除k时为x-1和1,否则为xvoidsolve(){intx,k;cin>>x>>k;if(x%k==0){cout<<"2\n"<<x-1<<&qu......
  • Codeforces 1439E - Cheat and Win
    模拟赛放了道*3500,结果全场都切了,非常恐怖。首先考虑怎么样的树是合法的,打个表发现SG函数值为\(\sum_{d}2^d·(\text{深度为d的点个数}\bmod2)\),换句话说后手必胜当且仅当每种深度的点数都是偶数。于是实际上我们只用建出虚树之后树上差分一下求出每个点被覆盖的情况,进而......
  • hdfs开启回收站(废纸篓)
    1、背景我们知道,在mac系统上删除文件,一般情况下是可以进入废纸篓里的,如果此时我们误删除了,还可以从废纸篓中恢复过来。那么在hdfs中是否存在类似mac上的废纸篓这个功能呢?答案是存在的。2、开启hdfstrash功能当我们启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会......
  • hdfs开启回收站(废纸篓)
    1、背景我们知道,在mac系统上删除文件,一般情况下是可以进入废纸篓里的,如果此时我们误删除了,还可以从废纸篓中恢复过来。那么在hdfs中是否存在类似mac上的废纸篓这个功能呢?答案是存在的。2、开启hdfstrash功能当我们启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会......
  • 【题解】Codeforces Round 737 (CF1557)
    VP情况:solve:4/5rank:431st评价:VP了一下,我这个shaberB直接5发罚时,耽误了二十多分钟,以及被D各种细节差点搞死。A.EzzatandTwoSubsequences(*800)题目描述:给定一个序列,将其分为\(2\)个组,要求这两个组的平均值之和最大,组内的数不要求在原序列中连续。题目分析:我们......
  • HDFS的block为什么是128M?增大或减小有什么影响?
    1、首先先来了解几个概念寻址时间:HDFS中找到目标文件block块所花费的时间。原理:文件块越大,寻址时间越短,但磁盘传输时间越长;文件块越小,寻址时间越长,但磁盘传输时间越短。2、为什么block不能设置过大,也不能设置过小如果块设置过大,如果块设置的太大,从磁盘传输数据的时间会明显大于定位......
  • HDFS文件因Hadoop版本原因导致append操作失败的问题
    问题重现:2023.05.24练习B站尚硅谷Hadoop3里的HDFS的Shell操作(append)[[email protected]]$hadoopfs-appendToFileliubei.txt/sa点击查看代码[[email protected]]$hadoopfs-appendToFileliubei.txt/sa2023-05-2420:30:37,303WARNhdfs.......
  • HDFS学习进阶
    一、HDFS元数据管理HDFS是一个分布式文件存储系统,文件分布式存储在多个DataNode节点上。一个文件存储在哪些DataNode节点的哪些位置的元数据信息(metadata)由NameNode节点来处理。随着存储文件的增多,NameNode上存储的信息也会越来越多。在HDFS中主要是通过两个组件FSImage(快照文件,......