ARC061-D すぬけ君の塗り絵/Snuke's Coloring

問題URL:すぬけ君の塗り絵/Snuke's Coloring
制約があからさま過ぎだからできる人は秒で終わりそう。

考察

制約からして黒マス中心に考えるしかない。全ての3\times 3の正方形のうち、黒マスを含むものは高々9Nしかないので、これらが含む黒マスの個数を数えてみる。時間は大丈夫そうだけど、メモリが怪しい。

実装

map使うとほとんど感覚通りに書けたので特になし。

#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
#define all(x) (x).begin(),(x).end()
using namespace std;
const int INF=1145141919,MOD=1e9+7;
const long long LINF=8931145141919364364,LMOD=998244353;
// const int dx[]={1,0,-1,0,1,1,-1,-1},dy[]={0,-1,0,1,1,-1,-1,1};

int main(){
    int h,w,n; cin>>h>>w>>n;
    // 中心が{y,x}である3*3マスに含まれる黒マス
    map<pair<int,int>,int> mp;
    rep(i,n){
        int a,b; cin>>a>>b;
        for(int y=max(a-1,2);y<=min(a+1,h-1);y++){
            for(int x=max(b-1,2);x<=min(b+1,w-1);x++){
                mp[{y,x}]++;
            }
        }
    }
    long long ans[10]={}; ans[0]=(long long)(h-2)*(w-2);
    for(auto i:mp){
        ans[i.second]++;
        ans[0]--;
    }
    rep(i,10) cout<<ans[i]<<endl;
    return 0;
}