网格照明

 题目连接:

https://leetcode-cn.com/problems/grid-illumination/

题目大意:

一定要注意对角线的处理方法 ; 当前位置不会被照亮的时候,不需要再进行删点,因为不可能有满足的点 (结合题目条件)

具体思路:

判断某一个点是否满足题目条件,除了行坐标 和 纵坐标相等之外,还有这点 和 灯笼 的 横纵坐标之差相等。

A [ 0 ] - B [ 0 ] = A [ 1 ] - B [ 1 ]  或者 A [ 0 ] - B[ 0 ] = B [ 0 ] - A[ 1 ]

将A全部移到前面,然后记录行,纵,还有上述的两个值。然后对query的值进行遍历,看是否有满足题目条件的,如果有的话,就把这个点以及他周围的点进行处理 

AC代码:

 1 class Solution
 2 {
 3 public:
 4     vector<int> gridIllumination(int N, vector<vector<int>>& lamps, vector<vector<int>>& queries)
 5     {
 6 
 7         vector<int>ans;
 8         vector<map<int,int> > vis(4); // 定义了4个map<int,int>类型的向量
 9         map< pair<int,int>,int >live;
10         int i, j , len , tmp;
11 
12         for(auto pos : lamps)
13         {
14             vis[0][pos[0]]++;
15             vis[1][pos[1]]++;
16             vis[2][pos[0] - pos[1]]++;
17             vis[3][pos[0] + pos[1]]++;
18             live[make_pair(pos[0] , pos[1])]++;
19         }
20 
21         for(auto pos : queries)
22         {
23             tmp = judge(vis ,pos[0] ,pos[1]);
24             ans.push_back(tmp);
25             if(!tmp)continue;
26             for( i = -1 ; i <= 1; i++)
27             {
28                 for( j = -1 ; j <= 1; j++)
29                 {
30                     if(live[make_pair(pos[0] + i, pos[1] + j)] > 0)
31                     {
32                         live[make_pair(pos[0] + i, pos[1] + j)]--;
33                         del(vis, pos[0] + i,pos[1] + j , N);
34                     }
35                 }
36             }
37         }
38         return ans;
39     }
40     bool judge(vector<map<int,int> > &vis,int x,int y)
41     {
42         return (vis[0][x] > 0 || vis[1][y] > 0 || vis[2][x - y] > 0 || vis[3][y + x] > 0);
43     }
44 
45     void del(vector<map<int,int> >&vis ,int x ,int y,int n){
46     if(vis[0][x] > 0)vis[0][x]--;
47     if(vis[1][y] > 0)vis[1][y]--;
48     if(vis[2][x - y] > 0)vis[2][x - y]--;
49     if(vis[3][x + y] > 0)vis[3][x + y]--;
50     return ;
51     }
52 
53 
54 
55 };

 

posted @ 2019-09-03 21:00  Let_Life_Stop  阅读(246)  评论(0编辑  收藏  举报