リンク:https://www.nowcoder.com/questionTerminal/6acc6504df67406c98a75f5575e4b94a?orderByHotValue=1&page=1&onlyReference=false
出典:牛オフネットワーク
Q小さな画家は、彼の芸術的創造を始めました。「X」を表して、アートボードの初期状態は空で、小さなQ N×Mのピクセルグリッドのスレートが出ています。
Qフォームの斜線の方向が「/」、すなわち1、Qが、この傾きのいくつかの小さな格子斜線を選択する場合は、各Qは、少し斜めに選択され、自身の小さな絵の技術を有し、被覆されていますビデオ「B」と、青、フォームの一方の対角方向、すなわち、-1の勾配、Qが選択され小さな格子周期は、これは影付きで、と、黄色描かれている「\」が' Y「を表します。
グリッド上塗装青色と黄色の塗料の両方がオフされた場合、グリッドは「G」の表現と、緑色に変わります。
小さなQが仕事をしたい表情を集めている、あなたは彼が彼が絵を完了するために少なくとも必要性を持っていたどのように多くの操作を計算するのに役立ちます。
説明を入力します。
各入力は、テストを含みます。 各テストケースの最初の行は、2つの正の整数N及びM(1 <= N、M含有 <= 50)を、 長さと幅の描画ボードを示しています。 次のラインNは文字'B'、 'Y'、含ま長さMのN個の文字列が含まれ 、 'X'、 'G'を白、緑、黄、青、それぞれ。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は、2本のペンになります。
いくつか他の人が答えを書いて読んで、私は慎重に慎重にこの問題について考え、この場所は、おそらく最も厄介な問題このマトリックス、横または縦に捜査をチェックする方法はありませんで、調査は唯一の角度で配置するだけでなく、中央をオフに考えることができますBGXも判断に影響を与える何の問題、とは、文字だけを比較するために使用することができます。
ここでビットシンボル内のI変換行列Xは1に変換され、Bが2に変換され、Yは、に変換される。4、6 Gに変換され、私はここで考えさらに二つの数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 4 2 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);
}
}