zoukankan      html  css  js  c++  java
  • 6468: Snuke's Coloring

    6468: Snuke's Coloring

    时间限制: 2 Sec  内存限制: 128 MB
    提交: 50  解决: 22
    [提交][状态][讨论版][命题人:admin]

    题目描述

    We have a grid with H rows and W columns. At first, all cells were painted white.
    Snuke painted N of these cells. The i-th ( 1≤i≤N ) cell he painted is the cell at the ai-th row and bi-th column.
    Compute the following:
    For each integer j ( 0≤j≤9 ), how many subrectangles of size 3×3 of the grid contains exactly j black cells, after Snuke painted N cells?

    Constraints
    3≤H≤109
    3≤W≤109
    0≤N≤min(105,H×W)
    1≤ai≤H (1≤i≤N)
    1≤bi≤W (1≤i≤N)
    (ai,bi)≠(aj,bj) (i≠j)

    输入

    The input is given from Standard Input in the following format:
    H W N
    a1 b1
    :
    aN bN

    输出

    Print 10 lines. The (j+1)-th ( 0≤j≤9 ) line should contain the number of the subrectangles of size 3×3 of the grid that contains exactly j black cells.

    样例输入

    4 5 8
    1 1
    1 4
    1 5
    2 3
    3 1
    3 2
    3 4
    4 4
    

    样例输出

    0
    0
    0
    2
    4
    0
    0
    0
    0
    0
    

    提示


    There are six subrectangles of size 3×3. Two of them contain three black cells each, and the remaining four contain four black cells each.

    来源

    ABC045&ARC061 


    题意:一个h*w的棋盘,涂黑n个格子,求含有0~9个黑格子的3*3的矩阵分别有多少个

    思路:

    h和w的数据范围是1e9  显然不能开二维矩阵存涂黑的格子。

    每个黑格子只对周围九个3*3的矩阵有贡献,那么可以存一下左上角格子的坐标,然后统计一下就可以了。


    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+10,inf=1e9+7;
    typedef long long ll;
    ll h,w,node[maxn],n,a,b,cnt=0,zero,ans[15];
    
    int main(){
        scanf("%lld%lld%lld",&h,&w,&n);
        zero=(h-2)*(w-2);
        while(n--){
            scanf("%lld%lld",&a,&b);
            for (int i=-2;i<=0;i++){
                for (int j=-2;j<=0;j++){
                    if(a+i>=1 && a+i <=h-2 && b+j>=1 &&b+j <=w-2){
                        node[cnt++]=inf*(a+i)+(b+j);
                    }
                }
            }
        }
        sort(node,node+cnt);
        for (int i=0,tmp=1;i<cnt;i++){
            if(node[i]==node[i+1]) tmp++;
            else ans[tmp]++,zero--,tmp=1;
        }
        printf("%lld
    ",zero);
        for (int i=1;i<10;i++)
            printf("%lld
    ",ans[i]);
        return 0;
    }
    

  • 相关阅读:
    Beta阶段团队项目开发篇章2
    Beta阶段团队项目开发篇章1
    Alpha阶段博客链接
    大学生对技术网站需求的调查问卷结果分析
    关于大学生对技术网站需求的问卷调查
    第十。。。三周嘞
    进入第十一周喽
    第十周了耶~
    第九周也要过去啦~~~
    第,八,周,啦
  • 原文地址:https://www.cnblogs.com/acerkoo/p/9490322.html
Copyright © 2011-2022 走看看