题目
topcoder Room 675 SRM 477 DIV1
一道比较简单的题目
将6棱形的每条边,遍历一下就行了,注意奇数行和偶数行是不同点。
红色的是陆地,蓝色的是海洋,计算海滩的长度,其实就是海洋和陆地相邻的总长度
'#'号表示陆地,'.'表示海洋
Definition | |||||||||||||
|
1) | |||||||
|
2) | ||||
|
3) | ||||
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Islands{
public:
int beachLength(vector <string> kingdom){
int res=0;
int M = kingdom.size();
int N = kingdom[0].size();
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(kingdom[i][j]=='#'){
if(j-1>=0 && kingdom[i][j-1]=='.'){
res++;
}
if(j+1<N && kingdom[i][j+1]=='.'){
res++;
}
if(i%2==0){
if(i-1>=0 && j-1>=0 && kingdom[i-1][j-1]=='.'){
res++;
}
if(i-1>=0 && kingdom[i-1][j]=='.'){
res++;
}
if(i+1<M && j-1>=0 && kingdom[i+1][j-1]=='.'){
res++;
}
if(i+1<M && kingdom[i+1][j]=='.'){
res++;
}
}else{
if(i-1>=0 && j+1<N && kingdom[i-1][j+1]=='.'){
res++;
}
if(i-1>=0 && kingdom[i-1][j]=='.'){
res++;
}
if(i+1<M && j+1<N && kingdom[i+1][j+1]=='.'){
res++;
}
if(i+1<M && kingdom[i+1][j]=='.'){
res++;
}
}
cout<<"position"<<" "<<i<<" "<<j<<" result:"<<res<<endl;
}
}
}
return res;
}
};
int main(){
Islands m = Islands();
vector<string> v;
v.push_back("..#.##");
v.push_back(".##.#.");
v.push_back("#.#...");
int res= m.beachLength(v);
cout<<res<<endl;
return 0;
}
判断是否是是海滩的整个判断逻辑是可以抽出来的,单独用一个函数的,这个逻辑会更加简单。