Good Bye 2015 C. New Year and Domino dp+容斥原理
来源:互联网 发布:宝元plc编程软件 编辑:程序博客网 时间:2024/04/30 05:53
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 withh 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 1 through 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?
The first line of the input contains two integers h andw (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 lengthw. 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 integersr1i,c1i,r2i,c2i (1 ≤ r1i ≤ r2i ≤ h, 1 ≤ c1i ≤ c2i ≤ w) — the i-th query. Numbers r1i andc1i denote the row and the column (respectively) of the upper left cell of the rectangle. Numbersr2i andc2i denote the row and the column (respectively) of the bottom right cell of the rectangle.
Print q integers, i-th should be equal to the number of ways to put a single domino inside thei-th rectangle.
5 8....#..#.#......##.#....##..#.##........41 1 2 34 1 4 11 2 4 52 5 5 8
401015
7 39........................................###..###..#..###.....###..###..#..###....#..#.#..#..#.........#..#.#..#..#....###..#.#..#..###.....###..#.#..#..###..#....#.#..#....#.....#....#.#..#..#.#..###..###..#..###.....###..###..#..###........................................61 1 3 202 10 6 302 10 7 302 2 7 71 7 7 71 8 7 8
53891202302
A red frame below corresponds to the first query of the first sample. A domino can be placed in 4 possible ways.
题意:给出一个图,q次询问,每次询问这个图的某一个矩形区域装下一个长为1宽为2的矩形的方法有多少种。
思路:dp+容斥原理
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;char Map[505][505];int dp[505][505];int h, w, q, r1, c1, r2, c2;int main(){ int i, j, res; scanf("%d %d", &h, &w); for(int i = 0;i < h;i++) scanf("%s", Map[i]); for(i = 0;i < h;i++) if(i - 1 >= 0&&Map[i-1][0] == '.'&&Map[i][0] == '.') dp[i][0] = dp[i-1][0] + 1; else dp[i][0] = dp[i-1][0]; for(i = 0;i < w;i++) if(i - 1 >= 0&&Map[0][i-1] == '.'&&Map[0][i] == '.') dp[0][i] = dp[0][i-1] + 1; else dp[0][i] = dp[0][i-1]; for(i = 1;i < h;i++) { for(j = 1;j < w;j++) { dp[i][j] += dp[i - 1][j]; dp[i][j] += dp[i][j - 1]; if(Map[i][j] == '.'){ if(Map[i-1][j] == '.') dp[i][j]++; if(Map[i][j-1] == '.') dp[i][j]++; } dp[i][j] -= dp[i-1][j-1]; } } scanf("%d", &q); while(q--){ scanf("%d %d %d %d", &r1, &c1, &r2, &c2); //printf("%d %d", r2-r1-1, c2-c1-1); res = dp[r2-1][c2-1] - dp[r1-1][c2-1] - dp[r2-1][c1-1] + dp[r1-1][c1-1]; for(i = r1-1;i <= r2-1;i++) if(i-1>=r1-1&&Map[i-1][c1-1]=='.'&&Map[i][c1-1]=='.') res++; for(i = c1-1;i <= c2-1;i++) if(i-1>=c1-1&&Map[r1-1][i-1]=='.'&&Map[r1-1][i]=='.') res++; printf("%d\n", res); }}
- Good Bye 2015 C. New Year and Domino dp+容斥原理
- Good Bye 2015 C New Year and Domino(dp)
- Codeforces Good Bye 2015 C. New Year and Domino (预处理)
- CF Good Bye 2015 C- New Year and Domino(CF611C)
- codeforces Good Bye 2015 C - New Year and Domino
- CF Good Bye 2015 C. New Year and Domino && D. New Year and Ancient Prophecy (DP)
- codeforces-Good Bye 2015-New Year and Domino
- Codeforces 611C. New Year and Domino (Good Bye 2015 C题)
- Good Bye 2014 E. New Year Domino
- CodeForces 611 C. New Year and Domino(dp+容斥)
- codeforces Good Bye 2016-C New Year and Rating(二分)
- Good Bye 2016 C. New Year and Rating(模拟)
- Good Bye 2016 C. New Year and Rating思维
- Codeforces Good Bye 2016 C. New Year and Rating(模拟)
- Codeforces Good Bye 2015 D. New Year and Ancient Prophecy DP
- Good Bye 2015 D. New Year and Ancient Prophecy(dp+LCP)
- Good Bye 2015 D. New Year and Ancient Prophecy(dp+lcp)
- Codeforces Good Bye 2015 E. New Year and Three Musketeers
- centos 7 阿里云 Linux系统磁盘分区挂载和交换空间
- 从0自学C#04--特性和设计原则
- jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法
- [从头学数学] 第68节 小数的意义和性质
- Html 基础教程目录
- Good Bye 2015 C. New Year and Domino dp+容斥原理
- Fmod使用总结
- Android JSON解析
- Java 8特性探究(1):通往lambda之路_语法篇
- Javascript如何创建一个新的实例(指针)
- CSS 基础教程目录
- 03python_function
- 关于http请求头host字段中的port
- Activity中获取view的高度和宽度为0的原因以及解决方案