zoukankan      html  css  js  c++  java
  • New Year and Domino 二维前缀和

    C. New Year and Domino
    time limit per test
    3 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I don't think so.

    Limak is a little polar bear who loves to play. He has recently got a rectangular grid with h rows and w columns. Each cell is a square, either empty (denoted by '.') or forbidden (denoted by '#'). Rows are numbered 1 through h from top to bottom. Columns are numbered 1through w from left to right.

    Also, Limak has a single domino. He wants to put it somewhere in a grid. A domino will occupy exactly two adjacent cells, located either in one row or in one column. Both adjacent cells must be empty and must be inside a grid.

    Limak needs more fun and thus he is going to consider some queries. In each query he chooses some rectangle and wonders, how many way are there to put a single domino inside of the chosen rectangle?

    Input

    The first line of the input contains two integers h and w (1 ≤ h, w ≤ 500) – the number of rows and the number of columns, respectively.

    The next h lines describe a grid. Each line contains a string of the length w. Each character is either '.' or '#' — denoting an empty or forbidden cell, respectively.

    The next line contains a single integer q (1 ≤ q ≤ 100 000) — the number of queries.

    Each of the next q lines contains four integers r1ic1ir2ic2i (1 ≤ r1i ≤ r2i ≤ h, 1 ≤ c1i ≤ c2i ≤ w) — the i-th query. Numbers r1i and c1i denote the row and the column (respectively) of the upper left cell of the rectangle. Numbers r2i and c2i denote the row and the column (respectively) of the bottom right cell of the rectangle.

    Output

    Print q integers, i-th should be equal to the number of ways to put a single domino inside the i-th rectangle.

    Examples
    input
    Copy
    5 8
    ....#..#
    .#......
    ##.#....
    ##..#.##
    ........
    4
    1 1 2 3
    4 1 4 1
    1 2 4 5
    2 5 5 8
    output
    Copy
    4
    0
    10
    15
    input
    Copy
    7 39
    .......................................
    .###..###..#..###.....###..###..#..###.
    ...#..#.#..#..#.........#..#.#..#..#...
    .###..#.#..#..###.....###..#.#..#..###.
    .#....#.#..#....#.....#....#.#..#..#.#.
    .###..###..#..###.....###..###..#..###.
    .......................................
    6
    1 1 3 20
    2 10 6 30
    2 10 7 30
    2 2 7 7
    1 7 7 7
    1 8 7 8
    output
    Copy
    53
    89
    120
    23
    0
    2
    Note

    A red frame below corresponds to the first query of the first sample. A domino can be placed in 4 possible ways

      自闭 自闭 

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <queue>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <set>
     7 #include <iostream>
     8 #include <map>
     9 #include <stack>
    10 #include <string>
    11 #include <vector>
    12 #define  pi acos(-1.0)
    13 #define  eps 1e-6
    14 #define  fi first
    15 #define  se second
    16 #define  lson l,m,rt<<1
    17 #define  rson m+1,r,rt<<1|1
    18 #define  bug         printf("******
    ")
    19 #define  mem(a,b)    memset(a,b,sizeof(a))
    20 #define  fuck(x)     cout<<"["<<x<<"]"<<endl
    21 #define  f(a)        a*a
    22 #define  sf(n)       scanf("%d", &n)
    23 #define  sff(a,b)    scanf("%d %d", &a, &b)
    24 #define  sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
    25 #define  sffff(a,b,c,d) scanf("%d %d %d %d", &a, &b, &c, &d)
    26 #define  pf          printf
    27 #define  FRE(i,a,b)  for(i = a; i <= b; i++)
    28 #define  FREE(i,a,b) for(i = a; i >= b; i--)
    29 #define  FRL(i,a,b)  for(i = a; i < b; i++)
    30 #define  FRLL(i,a,b) for(i = a; i > b; i--)
    31 #define  FIN         freopen("DATA.txt","r",stdin)
    32 #define  gcd(a,b)    __gcd(a,b)
    33 #define  lowbit(x)   x&-x
    34 #pragma  comment (linker,"/STACK:102400000,102400000")
    35 using namespace std;
    36 typedef long long LL;
    37 typedef unsigned long long ULL;
    38 const int maxn = 2e5 + 10;
    39 int n, m, sum[505][505], y[505][505], x[505][505];
    40 char mp[505][505];
    41 int main() {
    42     sff(n, m);
    43     for (int i = 1 ; i <= n ; i++)
    44         scanf("%s", mp[i] + 1);
    45     for (int i = 1 ; i <= n ; i++) {
    46         for (int j = 1 ; j <= m ; j++) {
    47             if (mp[i][j] == '.' && mp[i + 1][j] == '.' ) {
    48                 sum[i][j]++;
    49                 y[i][j] = 1;
    50             }
    51             if (mp[i][j] == '.' && mp[i][j + 1] == '.' ) {
    52                 sum[i][j]++;
    53                 x[i][j] = 1;
    54             }
    55             sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    56         }
    57     }
    58     int q;
    59     sf(q);
    60     while(q--) {
    61         int x1, y1, x2, y2;
    62         sffff(x1, y1, x2, y2);
    63         int ans = sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
    64         for (int i = x1 ; i <= x2 ; i++) ans -= x[i][y2];
    65         for (int i = y1 ; i <= y2 ; i++) ans -= y[x2][i];
    66         printf("%d
    ", ans);
    67     }
    68     return  0;
    69 }
     
  • 相关阅读:
    springboot项目创建父级依赖
    springboot整合测试
    springboot中使用RedisTemplate实现redis数据缓存
    springboot整合redis
    springboot整合shiro
    配置 maven 环境变量
    虚拟机和主机之间一系列工具包,开启双向复制粘贴后导致的内存占用问题
    mysql服务无法启动的问题
    Linux学习遇到的问题(权限问题:例如无法创建目录"**": 权限不够"等等)
    Windows 10 配置Git 环境变量(还有:安装git后,鼠标右键没有“git bush here”)
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/9452027.html
Copyright © 2011-2022 走看看