您的位置:首页 > 编程语言 > Go语言

codeforces-Good Bye 2015-New Year and Domino

2016-03-19 19:53 686 查看
有点容斥原理的意思。。。

#include<cstdio>
long long dp[505][505],n,m;
char mp[505][505];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%s",mp[i]+1);
for(int i=0;i<=n;i++)
mp[i][0] = '#';
for(int j=0;j<=m;j++)
mp[0][j] = '#';
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{
dp[0][0] = 0;
if(i==0)dp[i][j] = 0;
else if(j==0)dp[i][j] = 0;
else{
dp[i][j] = dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1];
if(mp[i][j]=='.'&&mp[i][j-1]=='.')dp[i][j]++;
if(mp[i][j]=='.'&&mp[i-1][j]=='.')dp[i][j]++;
}
}
int x1,y1,x2,y2,l;
scanf("%d",&l);
while(l--)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
long long ans = dp[x2][y2]-(dp[x1-1][y2]+dp[x2][y1-1]-dp[x1-1][y1-1]);
for(int i=x1;i<=x2;i++)
if(mp[i][y1]=='.'&&mp[i][y1-1]=='.')ans--;
for(int i=y1;i<=y2;i++)
if(mp[x1][i]=='.'&&mp[x1-1][i]=='.')ans--;
printf("%I64d\n",ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: