去哪儿笔试:座位安排问题

去哪儿笔试:座位安排问题

题目描述

假设一个教室有m * n 个座位,每个座位上可以座一个学生。前提是座位没有坏掉,没坏的座位用’.’表示,坏掉的座位用’x’表示。

现在要在这个教室安排考试,由于坐在(x,y)位置上的同学能够抄到(x-1,y-1)、(x-1,y+1)、(x,y-1)、(x,y+1)的同学,所以要把他们分开安排。现在让我们计算出,这个教室能够最多安排多少人。

输入样例

2 3

输出样例

4

思路

从左上角的位置开始安排

  • 首先判断是不是坏掉的座位,如果是则不能安排人
  • 然后判断能不能抄袭到别人

这里写图片描述

import java.util.*;

public class Main {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        sc.nextLine();

        char[][] arr = new char[m][n];
        for(int i = 0; i < m; i++) {
            String line = sc.nextLine();
            char[] c = line.toCharArray(); 
            for(int j = 0; j < n; j++) {
                arr[i][j] = c[j]; 
            }
        }

        int[][] dp = new int[m+2][n+2];
        int count = 0;
        for(int i = 1; i <= m; i++) {
            for(int j = 1; j <= n; j++) {
                if(arr[i-1][j-1] == 'x') { // 如果座位坏掉了
                    continue;
                }
                // 判断能不能抄袭到别人
                if(dp[i-1][j-1] == 0 && 
                     dp[i-1][j+1] == 0 && 
                     dp[i][j-1] == 0 && 
                     dp[i][j+1] == 0) {
                    dp[i][j] = 1;
                    count++;
                }
            }
        }


        for(int i = 0; i <= m; i++) {
            for(int j = 0; j <= n; j++) {
                System.out.print(dp[i][j]+" ");
            }
            System.out.println();
        }

        System.out.println(count);
    }

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值