【CodeForces 611C】New Year and Domino
题意
h行w列的矩形格子,“." 代表空的,"#" 代表满的,多米诺是 1*2 的长方体,现在放进格子,给你子矩形的左上角和右上角,问在子矩形里共有多少种放一块多米诺的方法。
分析
如果是空的,我们存为a[i][j]=1;满的为0。
我们可以储存 b[i][j] 表示前 i 行 j 列有多少种放法,递推来求。

要求的大矩形的放法总数,就是粉色+紫色+蓝色+白色和红色框框的放法。
b[i][j-1]就是粉色+紫色,b[i-1][j]就是粉色+蓝色
b[i][j] += b[i][j-1] + b[i-1][j] -b[i-1][j-1]。
如果a[i][j]==1,b[i][j] += a[i][j-1]+a[i-1][j]。
针对每个询问:r1,c1到r2,c2 共有多少放法

ans += b[r2][c2] - b[r2][c1-1] - b[r1-1][c2] + b[r1-1][c1-1]。
接下来判断边界是否还有如图中白色框框的,要减去。
r1到r2行,如果c1列为空,而c1-1列也为空,那就要减去,
c1到c2列,如果r1行为空,而r1-1行也为空,那也要减去。
代码
#include <stdio.h>
#include <algorithm>
#define F(a,b,c) for(int a=b;a<=c;a++)
#define N 505
using namespace std;
int h,w,a[N][N],b[N][N],q,ans;
int r1,c1,r2,c2;
char ch;
int main()
{
scanf("%d%d",&h,&w);
F(i,,h)F(j,,w)
{
scanf(" %c",&ch);
if (ch == '.')
a[i][j]=;
}
F(i,,h)F(j,,w)
{
b[i][j] = b[i][j-] + b[i-][j] - b[i-][j-];
if (a[i][j])
b[i][j] += a[i][j-] + a[i-][j];
}
scanf("%d",&q);
F(i,,q)
{
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
ans = b[r2][c2] - b[r2][c1-] - b[r1-][c2] + b[r1-][c1-];
F(j,r1,r2)
if (a[j][c1] && a[j][c1-])
ans--; F(j,c1,c2)
if (a[r1][j] && a[r1-][j])
ans--; printf("%d\n",ans);
}
return ;
}
【CodeForces 611C】New Year and Domino的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 500E】New Year Domino
[题目链接]:http://codeforces.com/problemset/problem/500/E [题意] 有n个多米诺骨牌; 你知道它们的长度; 然后问你,如果把第i骨牌往后推倒,然后要求 ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
随机推荐
- DoTween NGUI bug
多次动画导致UISprite丢失 DOTween动画进行时与UISprite有冲突,DOTween多次重复同一个动画时,UISprite会莫名的丢失 UISprite动画代码 CUIManager.I ...
- HashTable Dictionary HashMap
HashTable和HashMap 脑海中一直存在两个Hash,一个是HashMap另一个是HashTable,今天来总结一下两者的区别 相同点:表示根据键的哈希代码进行组织的键/值对的集合. 区别: ...
- [转]比较Jmeter、Grinder和JAVA多线程本身压力测试所带来的性能开销
1. 测试环境 jmeter版本 :jmeter 2.4 grinder的版本 : Grinder 3 JAVA的版本:JDK 1.6 2. 测试代码 Jmeter测试代码 public class ...
- Win2003_IIS+PHP+MYSQL 全能服务器配置
WIN2003_IIS+PHP+mysql最新版_全能服务器配置 本次配置PHP的服务器环境:Windows2003+IIS6+ASP+PHP5+MySQL5整个配置过程需要是使用拥有管理员权限的系统 ...
- ArcGis 创建IWorkspace
); ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)workspaceName; ...
- iOS开发——网络编程Swift篇&Alamofire详解
Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...
- 动态调用webservice,不需要添加Web References
using System; using System.Collections.Generic; using System.Web; using System.Net; using System.IO; ...
- [5]Telerik Extensions for ASP.NET MVC 开发问题
1.Controller获取不到checkedNodes的问题 HTML @(Html.Telerik().TreeView() .Name("TreeView") ...
- 【CSS】css网页背景图片设置
刚学CSS,了解了下网页背景图设置,顺便记录下. 下面主要是实现背景图位置保持不变,即不随滚动条动而动的功能. body { background-image:url(images/bck.png); ...
- ruby on rails 里使用SideKiq 做后台任务
环境:ubuntu14.4,ruby2.1.5, rails4.2 一.新一个rais项目:rails new active_job --skip-bundle 进入项目文件夹: cd a ...