【java】只有1 和3过了,实在不知道怎么办 有注释
  • 板块P3392 涂国旗
  • 楼主Lzwywy
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/2/15 12:28
  • 上次更新2023/10/24 00:44:35
查看原帖
【java】只有1 和3过了,实在不知道怎么办 有注释
864036
Lzwywy楼主2023/2/15 12:28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class P3392涂国旗 {
	static int n, m;
	static int cw, cb, cr;//记录w b c大小 每次调用重新赋值0
	static int last = 1;// 赋初值 last=1:w last=2:b
	static char[][] map;
	static int count;
	static int flag;//记录如果在倒数第二行时 仍未有一行属于B 代表上面都是w 一定将此行变为B

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer st = new StreamTokenizer(br);
		st.nextToken();
		n = (int) st.nval;
		st.nextToken();
		m = (int) st.nval;
		map = new char[n][m];
		br.readLine();// absorb enter
		for (int i = 0; i < n; i++) {
			map[i] = br.readLine().toCharArray();
		}
		for (int i = 0; i < n; i++) {
			if (i == 0) {// 第一行
				f1(map[i]);
				count += cb + cr;
			} else if (i > 0 && i <= n - 2) {// 中间情况
				if (last == 1) {// 第二行||上一行是w
					f1(map[i]);
					if (cb >= cw) {
						last = 2;// 接下来要开始B了
						flag = 1;
						count += cw + cr;
					} else {
						count += cb + cr;
					}
				} else if (i == n - 2 && flag == 0) {
					f1(map[i]);
					count += cw + cr;
				} else if (last == 2) {
					f1(map[i]);
					if (cr >= cb) {
						last = 3;
						count += cw + cb;
					} else {
						count += cw + cr;
					}
				} else if (last == 3) {
					f1(map[i]);
					count += cw + cb;
				}
			} else if (i == n - 1) {// 最后一行
				f1(map[i]);
				count += cw + cb;
			}
			System.out.println(count + " ***" + last);
		}
		System.out.println(count);
	}

	static void f1(char[] arr) {
		cw = 0;
		cb = 0;
		cr = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 'W')
				cw++;
			if (arr[i] == 'B')
				cb++;
			if (arr[i] == 'R')
				cr++;
		}
	}
}
2023/2/15 12:28
加载中...