ARC061-D すぬけ君の塗り絵/Snuke's Coloring
問題URL:すぬけ君の塗り絵/Snuke's Coloring
制約があからさま過ぎだからできる人は秒で終わりそう。
考察
制約からして黒マス中心に考えるしかない。全てのの正方形のうち、黒マスを含むものは高々しかないので、これらが含む黒マスの個数を数えてみる。時間は大丈夫そうだけど、メモリが怪しい。
実装
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; }