Вопрос малый художник

 

Ссылки: https://www.nowcoder.com/questionTerminal/6acc6504df67406c98a75f5575e4b94a?orderByHotValue=1&page=1&onlyReference=false
Источник: Крупный рогатый скот-офф сети

Q маленький художник начал свое художественное творчество. Зашли с небольшой Q NXM пикселей сетки шифера, монтажными областями начальное состояние является пустым, с «X» представляет.
Вопрос имеет свои собственные небольшие методы живописи, каждый из Q выбран немного косой, если направление наклонных линий вида «/», то есть 1, Q будет выбирать несколько небольших наклонных линий решетки в этом склоне, покрыты Видео синее, с «B»; если один диагональное направление от формы «\», т.е. наклон -1, Q выбирают меньший период решетки в этом заштриховано, окрашены в желтом цвете, с ' Y «представляет.
Если сетка и покрашено голубая и желтая краска выключено, то сетка будет зеленеть, с представлением «G».
Малый Q привлек внешний вид , как на работу, вы помочь ему вычислить , сколько операций он, по крайней мере , необходимо завершить картину.

Введите описание:

Каждый вход содержит тест. 
Первая строка каждого теста содержит два положительных целых чисел N и М (1 <= N, M <= 50), указывает длину и ширину чертежной доски. 
Следующая строка содержит N N строк длины М, который содержит символ «B», «Y», «G», «X», соответственно, голубой, желтый, зеленый, белый. Q представляет собой целые небольшие работы должны быть завершены.

Выход Описание:

Выход положительное целое число, представляющее количество операций, необходимых для завершения минимум небольшой Q живописи.

Пример 1

запись

4 4 
YXXB 
XYGX 
XBYY 
BXXY

экспорт

3

объяснение

XXXX 
XXXX 
XXXX 
XXXX 
-> 
YXXX 
XYXX 
XXYX 
XXXY 
-> 
YXXB 
XYBX 
XBYX 
BXXY 
-> 
YXXB 
XYGX 
XBYY 
BXXY

 

Во-первых на решения проблем идей, люди чувствуют этот вопрос на самом деле не сложно, это очень раздражает, такая сумма, «\», окрашенная

YXXX

XYXX

XXYX

XXXY

Е. Хао, который можно рассматривать как состояние.

Если окрашенные

YXXX

XXXX

XXYX

XXXY бы две ручки.

Читайте другие люди писали ответы, я тщательно продумал тщательно этот вопрос, это место, вероятно, самые досадная проблема этой матрицу, нет способа проверить вбок или вертикально расследование, расследование может быть помещено только под углом, а также рассмотреть середину прочь проблема, и что BGX также влияет на суждение, может быть использована только для сравнения символов.

Здесь матрица я преобразования внутри битовых символов, Х преобразуется в 1, В преобразуется в 2, Y превращается в. 4, 6, преобразуется в G, I рассматривается здесь накладывается с последующим добавлением двух чисел G, в частности, как отличить Вы можете увидеть код, вдруг подумал о написании этой статьи, умножение будет немного лучше, который установлен в 1,2,3,6, мы заинтересованы может попробовать, может уменьшить условие суждения.

XBGBX
YBBYB
BGGXX
XYYBG
XYBGG
YYXYX

Преобразованные ему:
1 . 2. 1 2. 6 
4. 2 2 2. 4 
2. 6 6. 1. 1. 
1. 4. 4. 2 6. 
1. 2. 4 6. 6. 
4. 4. 1. 1. 4.

Эта операция была очень гладкой, так как число, которое будет располагаться под углом, так что я первая смена в соответствии с массивом косых черт в его встать. Массив вращается по часовой стрелке, 45 ° (см те, выделены жирным шрифтом)

Стать, как (см черный смелую позицию)

0 0 0 0 0 . 1 0 0 0 0 
0 0 0 0 4 0 2 0 0 0 
0 0 0 2 0 2 0 6 0 0 
0 0 1 0 6 0 2 0 2 0 
0 1 0 4 0 . 6 0 4 0 1 
. 4 0. 4 0. 4 0. 1 0 2 0 
0 4 0 2 0 2 0 1 0 0 
0 0 1 0 6 0 6 0 0 0 
0 0 0 4 0 . 6 0 0 0 0 
0 0 0 0 1 0 0 0 0 0 
то топорщится найти 2,6. 4,6 оглядкой, считают ли сломалась центр обработки данных, данные в конечном итоге платить больше , чтобы сделать 1.

Код выглядит следующим образом: все они AC.

import java.util.Scanner;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in); 
		int  n=sc.nextInt();
		int  m=sc.nextInt();
		String tem;
		tem = sc.nextLine();
		int  color[][] = new int [n][m];
			        for (int i = 0; i < n; i++) {//转换BYGX为1246
			            tem = sc.nextLine();
			            for (int j = 0; j < tem.length(); j++) {
			            	if(tem.charAt(j)=='B')
			            		color[i][j] = 2;
			            	if(tem.charAt(j)=='Y')
				                color[i][j] = 4;
			            	if(tem.charAt(j)=='G')
					            color[i][j] = 6;
			            	if(tem.charAt(j)=='X')
				                color[i][j] = 1;
			            }
			        } 
			        int [][] array= new int [m+n-1][m+n-1];
			        for(int i=0;i<n;i++)//数组给他立起来,顺时针转45°
			        	for(int j=0;j<m;j++)
			        		array[i+j][n-1-i+j]=color[i][j];
			       	int sum=0;
			       	int tag=0;
			       	for(int i=0;i<m+n-1;i++)
			       		{
			       		tag=0;
			       		for(int j=0;j<m+n-1;j++)//横着找
			       		
			       			{if(array[i][j]%4==2 && tag==0)
			       			{
			       				sum++;
			       				tag=1;
			       			}
			       			if(array[i][j]!=0&&array[i][j]%4!=2 && tag==1)//中间不连续情况
			       			{
			       				tag=0;
			       			}
			       			}
			       		}
			       	for(int i=0;i<m+n-1;i++)//竖着找
			       		{tag=0;
			       		for(int j=0;j<m+n-1;j++)
			       			{	
			       			if(array[j][i]/4==1 && tag==0)
			       		
			       			{
			       				sum++;
			       				tag=1;
			       			}
			       			if(array[j][i]!=0 && array[j][i]/4!=1&& tag==1)//中间不连续情况
			       			{
			       				tag=0;
			       			}
			       			}
			       		}
 System.out.println(sum);
}
}

 

 

 

 

 

 

 

 

рекомендация

отblog.csdn.net/mad_sword/article/details/91891381