【NOIP模拟】矩阵
2016-09-22 16:35
197 查看
Description
在麦克雷的面前出现了一个有n*m个格子的矩阵,每个格子用“.”或“#”表示,“.”表示这个格子可以放东西,“#”则表示这个格子不能放东西。现在他拿着一条1*2大小的木棒,好奇的他想知道对于一些子矩阵,有多少种放木棒的方案。Solution
这是一道水的不行的题,每次找点对个数除以2就好了。矩阵前缀和不水?
Code
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn=507; int i,j,k,l,t,n,m,ans; char s[maxn][maxn]; int a[maxn][maxn],shang[maxn][maxn],xia[maxn][maxn],zuo[maxn][maxn],you[maxn][maxn]; int b[maxn][maxn],x,y,cas,xx,yy,f[maxn][maxn]; int fang[4][2]={1,0,0,1,-1,0,0,-1}; int main(){ // freopen("fan.in","r",stdin); // freopen("fan.out","w",stdout); scanf("%d%d",&n,&m); fo(i,1,n){ scanf("%s",s[i]+1); fo(j,1,m){ if(s[i][j]=='.')b[i][j]=1; } } fo(i,1,n){ fo(j,1,m){ if(!b[i][j])continue; fo(k,0,3){ x=fang[k][0]+i,y=fang[k][1]+j; if(x<1||x>n||y<1||y>m||b[x][y]==0)continue; a[i][j]++; if(k==0)xia[i][j]++; else if(k==1)you[i][j]++; else if(k==2)shang[i][j]++; else zuo[i][j]++; } } } fo(i,1,n){ fo(j,1,m){ f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j]; shang[i][j]+=shang[i][j-1]; xia[i][j]+=xia[i][j-1]; zuo[i][j]+=zuo[i-1][j]; you[i][j]+=you[i-1][j]; } } for(scanf("%d",&cas);cas;cas--){ scanf("%d%d%d%d",&x,&y,&xx,&yy); ans=0; ans-=(zuo[xx][y]-zuo[x-1][y])+(you[xx][yy]-you[x-1][yy]) +(shang[x][yy]-shang[x][y-1])+(xia[xx][yy]-xia[xx][y-1]); ans=(ans+f[xx][yy]-f[x-1][yy]-f[xx][y-1]+f[x-1][y-1])/2; printf("%d\n",ans); } }
相关文章推荐
- jzoj. 3519. 【NOIP2013模拟11.6A组】灵能矩阵(pylon)
- (noip 模拟 Matrix)<逃避矩阵乘法的好方法#滑稽>
- 【jzoj5335】【NOIP2017提高A组模拟8.24】【早苗】【矩阵乘法快速幂】
- NOIP模拟 Matrix 矩阵运算
- 【NOIP2013模拟11.6A组】灵能矩阵(pylon)
- NOIP--螺旋矩阵(技巧+模拟)
- 【Noip模拟】【dp】【LIS】【矩阵快速幂】
- 【NOIP2016提高A组模拟9.21】矩阵
- 【NOIP2016提高A组模拟9.24】天使的分裂 (矩阵乘法)
- [NOIP模拟] 矩阵
- 【模拟】[NOIP2014]螺旋矩阵[c++]
- 【NOIP2016提高A组模拟7.15】斐波那契数列(矩阵乘法)
- 矩阵【NOIP2016提高A组模拟9.21】
- 【JZOJ4791】【NOIP2016提高A组模拟9.21】矩阵
- noip2014 螺旋矩阵 (模拟)
- 【JZOJ5335】【NOIP2017提高组模拟】早苗(DP、矩阵乘法)
- 【NOIP2016提高A组模拟9.28】求导
- 【20150912】NOIP模拟 题解 & 总结
- 【NOIP2016提高A组模拟7.17】锦标赛
- JZOJ3453. 【NOIP2013中秋节模拟】连通块(connect)