律师微网站建设,定制化开发,儿童网页设计素材,建设网站建设的目标1.题目描述n 个砖块排成一排#xff0c;从左到右编号依次为 1∼n。每个砖块要么是黑色的#xff0c;要么是白色的。现在你可以进行以下操作若干次#xff08;可以是 0 次#xff09;#xff1a;选择两个相邻的砖块#xff0c;反转它们的颜色。#xff08;黑变白#xf…1.题目描述n 个砖块排成一排从左到右编号依次为 1∼n。每个砖块要么是黑色的要么是白色的。现在你可以进行以下操作若干次可以是 0 次选择两个相邻的砖块反转它们的颜色。黑变白白变黑你的目标是通过不超过 3n 次操作将所有砖块的颜色变得一致。输入格式第一行包含整数 T表示共有 T组测试数据。每组数据第一行包含一个整数 n。第二行包含一个长度为 n 的字符串 s。其中的每个字符都是 W 或 B如果第 i 个字符是 W则表示第 i 号砖块是白色的如果第 i 个字符是 B则表示第 i 个砖块是黑色的。输出格式每组数据如果无解则输出一行 −1。否则首先输出一行 k表示需要的操作次数。如果 k0则还需再输出一行 k 个整数p1,p2,…,pk。其中 pi 表示第 i次操作选中的砖块为 pi 和 pi1号砖块。如果方案不唯一则输出任意合理方案即可。数据范围1≤T≤102≤n≤200。输入样例48BWWWWWWB4BWBB5WWWWW3BWB输出样例36 2 4-1022 12.思路分析这个题的结果不唯一可以全黑也可以全白如果无解则输出-1因为每次反转都是反转第i位和第i1位那么只需遍历到n-1位首先将每一位全部反转为白色如果最后一位与第一位都是白色那么成功其次将每一位全部反转为黑色如果最后一位与第一位都是黑色那么成功判断的代码用连接前面一个判断成功就不会执行后面一个3.Ac代码
import java.io.*;
import java.util.ArrayList;public class Main {public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new InputStreamReader(System.in));int t Integer.parseInt(br.readLine());while (t--0){int n Integer.parseInt(br.readLine());String sbr.readLine();if(!check(s,W) !check(s,B)) System.out.println(-1);}}static char []ss;private static boolean check(String s, char x) {sss.toCharArray();ArrayListInteger arrnew ArrayList();int nss.length;for(int i0;i1n;i){if(ss[i]!x) {update(i);update(i1);arr.add(i);}}if(ss[n-1]!ss[0]) return false;System.out.println(arr.size());for (Integer a : arr) {System.out.print(a1 ); //操作下标从1 开始}if(arr.size()!0) System.out.println();return true;}private static void update(int i) {if(ss[i]W){ss[i]B;}else ss[i]W;}
}
感谢你能看完 如有错误欢迎评论指正有好的思路可以交流一波如果对你有帮助的话点个赞支持下