AtCoder Regular Contest 061 D - すぬけ君の塗り絵 / Snuke's Coloring
問題
AtCoder Regular Contest 061 D - すぬけ君の塗り絵 / Snuke's Coloring
beta.atcoder.jp
使用言語
C++
要点
・ある塗られたマスを含む9つの各3*3の正方形にスコアを設けてそこの数だけをカウントする
・mapで管理して,キーはpairにする
要素へのアクセスは{,} でも make_pairでも出来るっぽい
・マスの番号が1〜Nなのに注意
・0のものについては,一つ以上塗られたマスを含んだ時に全体から引いた
・ans[0]でキャストし忘れてバグりました
所感
・Dにしては難しいと思ったのですが,どうなのでしょうか
・解説雑ですみません
コード
ull ans[10]; map<pair<int, int>, int> mp; int main() { int h, w, n; cin>>h>>w>>n; ans[0] = (ull)(h-2) * (w-2); REP(i,n) { int a, b; cin>>a>>b; FOR(dx,-1,2) { FOR(dy,-1,2) { if (a+dx<2 || a+dx>h-1 || b+dy<2 || b+dy>w-1) continue; //cout<<a<<" "<<b<<" "<<a+dx<<" "<<b+dy<<endl; pair<int, int> tmpp = {a+dx,b+dy};//make_pair(a+dx,b+dy); //ここの入力形式はどちらでも問題がないようです if (mp.find(tmpp) == mp.end()) { mp[tmpp] = 1; ans[0]--; } else { mp[tmpp]++; } } } } for (auto itr : mp) { ans[itr.second]++; } REP(i,10) { cout<<ans[i]<<endl; } return 0; }