Codeforces - 1108D. Diverse Garland

发布于 2024-04-25 17:00:36 字数 2075 浏览 15 评论 0

题目

这题和上题差不多,也是给你 n 个有 n 个字符的字符串,这里的 Diverse Garland 定义为任意两个相邻的字符不能相等,要你改变最少的字符,使得字符串是 Diverse Garland

解析

使用贪心+枚举即可:

  • 1 ~ n-1 位置枚举,如果 str[i] == str[i-1] ,说明至少需要改变其中一个;
  • 此时我们去看 str[i + 1] 的情况,此时贪心的思想就是让 str[i-1] 、str[i]、str[i+1] 这三个字符,只需要改变 str[i] 就能让 str[i-1]、str[i]、str[i+1] 三个字符组成的字符串是 Diverse Garland
  • 具体的六种情况我在代码中都注释了,注意细节即可;
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        PrintStream out = System.out;
        int n = cin.nextInt();
        String str = cin.next();
        char[] chs = str.toCharArray();
        int count = 0;
        for (int i = 1; i <= n - 1; i++) {
            if (chs[i] != chs[i - 1])
                continue;
            count++;
            if (chs[i] == 'R') {  // RRB -> RGB
                if (i + 1 < n && chs[i + 1] == 'B') {
                    chs[i] = 'G';
                } else { // RR(R|G) -> RB(R|G)
                    chs[i] = 'B';
                }
            } else if (chs[i] == 'B') {
                if (i + 1 < n && chs[i + 1] == 'R') { //BBR --> BGR
                    chs[i] = 'G';
                } else {  // BB(B|G) --> BR(B|G)
                    chs[i] = 'R';
                }
            } else { // chs[i] == 'G'
                if (i + 1 < n && chs[i + 1] == 'R') { //GGR --> GBR
                    chs[i] = 'B';
                } else {             // GG(G|B) --> GR(G|B)
                    chs[i] = 'R';
                }
            }

        }
        out.println(count);
        out.println(new String(chs));
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

如日中天

暂无简介

0 文章
0 评论
636 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文