天天看點

計蒜客 2018藍橋杯省賽 B組模拟賽(五) H題 蒜頭君下棋(java)

蒜頭君下棋

蒜頭君喜歡下棋。最近它迷上了國際象棋。國際象棋的棋盤可以被當做一個 8\times 88×8 的矩陣,棋子被放在格子裡面(不是和中國象棋一樣放線上上)。

蒜頭君特别喜歡國際象棋裡面的馬,馬的移動規則是這樣的:橫着走兩步之後豎着走一步,或者橫着走一步之後豎着走兩步。例如,一匹馬在 (3,3)(3,3) 的位置,則它可以到達的地方有 (1,2)(1,2),(2,1)(2,1),(1,4)(1,4),(4,1)(4,1),(5,2)(5,2),(2,5)(2,5),(5,4)(5,4),(4,5)(4,5) 八個地方。蒜頭君想要把整個棋盤都放上馬,并且讓這些馬不能互相攻擊(即任何一匹馬不能走一步之後就到達另一匹馬的位置)。蒜頭君當然知道在 8 \times 88×8 的棋盤上怎麼放馬,但如果棋盤變為 n \times mn×m 的,蒜頭君就不懂了。他希望你來幫忙他計算一下究竟能放多少匹馬。

輸入格式

共一行,兩個整數nn和mm(1 \leq n , m \leq 10001≤n,m≤1000),代表棋盤一共有 nn 行 mm列。

輸出格式

輸出一個整數,代表棋盤上最多能放的馬的數量。

樣例輸入1

2 4      

樣例輸出1

4      

樣例輸入2

3 4      

樣例輸出2

6      

思路:

用sum表示可以放的最多的棋子個數

若n>m先将m和n調換位置,我們按照行數多的進行解題。

(1)當棋盤隻有一行時,棋盤上全放上棋子即可,即sum=m。

(2)當棋盤隻有兩行時,參考如下放的方法:

OOXXOOXXOO.....

OOXXOOXXOO.....

即放兩排空兩排。

如圖當n=2時 m與sum 的關系

計蒜客 2018藍橋杯省賽 B組模拟賽(五) H題 蒜頭君下棋(java)

可以找到規律:當m除4取餘結果為0時 sum=m;

                      當m除4取餘結果為1時 sum=m+1;

                      否則sum=m / 4 * 4 + 4;

(3)其它情況下,參考國際象棋棋盤的顔色,馬跳一次一定會從白色格子變為黑色,是以把所有馬放在同一顔色下即可。

計蒜客 2018藍橋杯省賽 B組模拟賽(五) H題 蒜頭君下棋(java)

根據圖中黑色和白色位置關系可以得出規律:sum = (n * m + 1) / 2;

代碼如下:

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int sum = 0;
		if(n>m){
			int t = n;
			n = m;
			m = t;
		}
		if (n==1)
			sum=m;
		else if(n==2){
			if(m%4==0){
				sum=m;
			}
			else if(m%4==1){
				sum=m+1;
			}else{
				sum=m/4*4+4;
			}
		}else{
			sum=(n*m+1)/2;
		}
		System.out.println(sum);
    }
	
}
           

https://blog.csdn.net/mcp3128/article/details/79704114