题目大意:有一个x*y的电影院,有一定的坏座位,两个人不能坐在一起,问题是最少坐多少人,最多坐多少人。
每组输入的数据,分别对应电影院的长宽,有几个坏座位,以及坏座位的坐标。
解题思路:将电影院根据边界和坏座位分割成若干个小单元,每个单元遵循以下规律,不够的进行取整。
最多:每两个位子坐一个人(人空人空人空) 最少:每三个位子坐一个人(空人空空人空)
AC代码:
1 import java.util.*; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 int t = sc.nextInt();int k = 1; 7 while(t > 0){ 8 int x = sc.nextInt(); 9 int y = sc.nextInt(); 10 int map[][] = new int[x][y]; 11 int b = sc.nextInt(); 12 int max = 0;int min = 0; 13 for(int i = 0;i < b;i ++){ 14 int bx = sc.nextInt(); 15 int by = sc.nextInt(); 16 map[bx][by] = 1; 17 } 18 int num = 0; 19 for(int i = 0;i < x;i ++){ 20 for(int j = 0;j < y;j ++){ 21 if(map[i][j] == 1){ 22 max += (num+1)/2; 23 min +=(num+2)/3; 24 num = 0; 25 } 26 else{num ++;} 27 } 28 max += (num+1)/2; 29 min += (num+2)/3; 30 num = 0; 31 } 32 System.out.println("Case #" + k + ": " + max + " " + min); 33 k ++;t --; 34 } 35 } 36 }