Good Bye 2015 C. New Year and Domino(前缀和+思维)

题目链接
在这里插入图片描述
在这里插入图片描述
思路:r【i】【j】代表i这一行能存多少个,c【i】【j】代表j这一列能存多少个。

#include<bits/stdc++.h> 
#define ll long long
using namespace std;
const int maxn=505;
char s[maxn][maxn];
int r[maxn][maxn],c[maxn][maxn];
int main()
{
	int n,h,q,x1,y1,x2,y2;
	scanf("%d %d",&n,&h);
	for(int i=1;i<=n;++i) scanf("%s",s[i]+1);
	for(int i=1;i<=n;++i)
	for(int j=1;j<=h;++j)
	r[i][j]=r[i][j-1]+(s[i][j]=='.'&&s[i][j-1]=='.');
	for(int j=1;j<=h;++j)
	for(int i=1;i<=n;++i)
	c[j][i]=c[j][i-1]+(s[i][j]=='.'&&s[i-1][j]=='.');
	scanf("%d",&q);
	while(q--)
	{
		ll ans=0;
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
		for(int i=x1;i<=x2;++i) ans+=r[i][y2]-r[i][y1];
		for(int i=y1;i<=y2;++i) ans+=c[i][x2]-c[i][x1];
		printf("%lld\n",ans);
	}
}
发布了328 篇原创文章 · 获赞 1 · 访问量 9095

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/105229586