码迷,mamicode.com
首页 > 其他好文 > 详细

JZOJ_7.15C组第四题 城市统计

时间:2018-07-15 23:16:41      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:printf   矩阵   tin   fonts   type   i++   blog   图片   sdi   

前言

13、14日的题被我吃掉了,有时间再吐出来。

题意

给出一个矩阵,上面有商业区和居民区,以每个点为中心,在它不超过r的直径下计算出这个矩形里每个居民区到离它最近商业区的曼哈顿距离的总和,最后输出一个矩形,上面代表每个点为矩形的答案。

思路

先用bfs求出每个居民区到最近的商业区的距离,之后n$^{2}$处理以每个点为最右下角,以(1,1)为最左下角的矩形之间的距离总和,后面n$^{2}$输出就好了。
计算答案:技术分享图片

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<queue>
using namespace std;
queue<int> x,y;
short dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int f[151][151],ans[151][151],c[151][151],n,t,bx,by,sx,sy,r;
void read(int &tot)
{
    tot=0;
    char c=getchar();
    while (!isdigit(c)) c=getchar();
    while (isdigit(c)) tot=(tot<<3)+(tot<<1)+c-48,c=getchar();
}
void bfs()
{
    int xx,yy,a,b;
    while(!x.empty())
    {
        a=x.front();b=y.front();
        x.pop();y.pop();
        for(int i=0;i<4;i++)
        {
            xx=a+dx[i];yy=b+dy[i];
            if(xx<1||yy<1||xx>n||yy>n||c[xx][yy]==1) continue;
            c[xx][yy]=1;
            f[xx][yy]=f[a][b]+1;
            x.push(xx);y.push(yy);
        }
    }
}
int main()
{   
    read(t);
    while (t--)
    {
        memset(f,0,sizeof(f));
        memset(ans,0,sizeof(ans));
        read(n);
        read(r);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                read(c[i][j]);
                if(c[i][j]) //把商业区入队
                {
                    x.push(i);
                    y.push(j);
                }
            }
        bfs();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                ans[i][j]=ans[i-1][j]+ans[i][j-1]+f[i][j]-ans[i-1][j-1];//处理所有的ans
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                bx=min(n,i+r);by=min(n,j+r);
                sx=max(0,i-r-1);sy=max(0,j-r-1);
                printf("%d ",ans[bx][by]-ans[bx][sy]-ans[sx][by]+ans[sx][sy]);
            }
            printf("\n");
        }
        printf("\n");
    }
}

JZOJ_7.15C组第四题 城市统计

标签:printf   矩阵   tin   fonts   type   i++   blog   图片   sdi   

原文地址:https://www.cnblogs.com/HSZGB/p/9314939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!