UOJ #585. 新年和多米诺
生活随笔
收集整理的這篇文章主要介紹了
UOJ #585. 新年和多米诺
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】:Limak是一只喜歡玩的小北極熊。 他最近得到了一個帶有h行和w列的矩形網格。 每個單元格都是一個正方形,可以是空的(用'.'表示),也可以是禁止的(用'#'表示)。 行從上到下編號為1到h。 列從左到右編號為1到w。此外,Limak還有一張多米諾骨牌。 他想把它放在網格中的某個地方。 多米諾骨牌將恰好占據兩個相鄰的單元格,位于一行或一列中。 兩個相鄰的單元格必須為空,并且必須位于網格內。Limak需要更多的樂趣,因此他會考慮一些問題。 在每個查詢中,他選擇一個矩形,并思考有多少種方法可以將一個多米諾骨牌放在所選矩形內?
【輸入描述】:第一行包含兩個整數h和w(1≤h,w≤500);接下來的h行描述了一個網格。 每行包含一個長度為w的字符串。 每個字符都是'.' 或'#';下一行包含一個整數q(1≤q≤100000),表示查詢次數;接下來的q行中的每一行包含四個整數r1i,c1i,r2i,c2i(1≤r1i≤r2i≤h,1≤c1i≤c2i≤w),表示第i個查詢。 數字r1i和c1i分別表示矩形的左上單元格的行和列。 數字r2i和c2i分別表示矩形右下單元格的行和列。
【輸出描述】:輸出q行,每行一個正整數,表示對應詢問的方案數。
【樣例輸入1】:5 8
....#..#
.#......
##.#....
##..#.##
........
4
1 1 2 3
4 1 4 1
1 2 4 5
2 5 5 8【樣例輸出1】:4
0
10
15【樣例輸入2】: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【樣例輸出2】:53
89
120
23
0
2【時間限制、數據范圍及描述】:時間:1s 空間:256M40%的數據:1≤h,w≤100;1≤q≤10000;100%的數據:1≤h,w≤500;1≤q≤100000;本題可以算出每一行和每一列的貢獻,統計答案時將這些貢獻相減再相加即可.Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
#include<deque>
using namespace std;
const int N=505;
int h,w,q,r[N][N],l[N][N],r1,c1,r2,c2;
char c[N][N];
int main(){scanf("%d%d",&h,&w);for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){cin>>c[i][j];}}for(int i=1;i<=h;i++){int tot=0;for(int j=1;j<=w;j++){if(c[i][j]=='#'){tot=0;r[i][j]=r[i][j-1];continue;}tot++;if(tot!=1){r[i][j]=r[i][j-1]+1;}else{r[i][j]=r[i][j-1];}}}for(int j=1;j<=w;j++){int tot=0;for(int i=1;i<=h;i++){if(c[i][j]=='#'){tot=0;l[i][j]=l[i-1][j];continue;}tot++;if(tot>1){l[i][j]=l[i-1][j]+1;}else{l[i][j]=l[i-1][j];}}}scanf("%d",&q);while(q--){scanf("%d%d%d%d",&r1,&c1,&r2,&c2);int ans=0;for(int i=r1;i<=r2;i++){ans+=r[i][c2]-r[i][c1];}for(int j=c1;j<=c2;j++){ans+=l[r2][j]-l[r1][j];}printf ("%d\n",ans);}return 0;
}
轉載于:https://www.cnblogs.com/ukcxrtjr/p/11531253.html
總結
以上是生活随笔為你收集整理的UOJ #585. 新年和多米诺的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UOJ #584. 天天去哪吃
- 下一篇: UOJ #586. 旅行问题