SRM 477 DIV1 Easy - Islands

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10874&rd=14157

六角形で表されるlandとwaterのエリアがあり、
その接点がビーチとなる。

地形が与えられたとき、存在するビーチの数を求める。

解き方


ビーチとなる条件を判定文に落とし込んで実装するだけ。

まず、ビーチはlandとwaterひとつずつに接する場合なので
landについて調べることで重複なく調べられる。

あとは、高さのMOD2が0のときと1のときの条件を落としこんで
実装してあげれば良い。

コード


class Islands {

public: int beachLength(vector<string> kingdom) {
int h=kingdom.size(),w=kingdom[0].size();
int ret=0;

FORE(i,0,h)FORE(j,0,w)if(kingdom[i][j]=='#'){
if(j-1>=0 && kingdom[i][j-1]=='.')ret++;
if(j+1<w && kingdom[i][j+1]=='.')ret++;

if(i-1>=0 && kingdom[i-1][j]=='.')ret++;
if(i+1<h && kingdom[i+1][j]=='.')ret++;

if(i%2==0 && j-1>=0 && i+1<h && kingdom[i+1][j-1]=='.')ret++;
if(i%2==0 && j-1>=0 && i-1>=0 && kingdom[i-1][j-1]=='.')ret++;

if(i%2 && j+1<w && i+1<h && kingdom[i+1][j+1]=='.')ret++;
if(i%2 && j+1<w && i-1>=0 && kingdom[i-1][j+1]=='.')ret++;
}

return ret;
}

};

Share this

Related Posts

Previous
Next Post »