hdu 4414 2012杭州网络赛
2012-09-23 22:06
302 查看
给出一个图,要求 图中‘#’组成了多少个 十字架,要注意十字架的宽度是奇数,比赛的时候队友 dfs过的,不过我这样做也挺快。。
思路:对每个‘#’进行判断,上下左右 ,步长为1 ,2,。。。25里面是不是都是符合条件,符合的话判断是不是个数为奇数即可
思路:对每个‘#’进行判断,上下左右 ,步长为1 ,2,。。。25里面是不是都是符合条件,符合的话判断是不是个数为奇数即可
#include<iostream> #include<algorithm> const int maxn=55; char map[maxn][maxn]; int dx[]={-1,0,1,0},dy[]={0,-1,0,1}; int n; bool ok(int x,int y){ return x>=0&&x<n&&y>=0&&y<n; } bool check(int x,int y){ int cnt=0; for(int i=1;i<=25;i++){ int tmpc=0; for(int j=0;j<4;j++){ int xx=x+dx[j]*i,yy=y+dy[j]*i; if(ok(xx,yy) && map[xx][yy]=='#'){ tmpc++; if(j%2==0){ if(yy>0&&map[xx][yy-1]=='#' || yy<n-1&&map[xx][yy+1]=='#')return false; cnt++; } else { if(xx>0&&map[xx-1][yy]=='#' || xx<n-1&&map[xx+1][yy]=='#')return false; cnt++; } } } if(tmpc==0)break; if(tmpc!=4)return false; } if(cnt%2==0&&cnt>0)return true; else return false; } int main(){ while(scanf("%d",&n)&&n){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++)scanf(" %c",&map[i][j]); } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(map[i][j]=='#' && check(i,j))ans++; } } printf("%d\n",ans); } }
相关文章推荐
- hdu 4410 Boomerang (2012杭州网络赛1001)
- hdu 4412 2012杭州赛区网络赛 期望
- HDU 4410 Boomerang(计算几何)(2012杭州网络赛1001)
- hdu 4417 2012杭州网络赛
- HDU 4417 Super Mario(2012杭州网络赛 H 离线线段树)
- HDU 4416 Good Article Good sentence 2012 杭州网络赛
- hdu 4417 2012杭州网络赛 划分树
- HDU 4417 Super Mario(2012杭州网络赛 H 离线线段树)
- hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***
- hdu 4419 2012杭州网络赛
- 【splay】hdu 4453 2012杭州赛区A题
- HDU 4279 Number(2012天津网络游戏---数论分析题)
- hdu 4739 2013杭州赛区网络赛 寻找平行坐标轴的四边形 **
- hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
- 2012天津赛区网络赛 hdu 4280 Island Transport
- hdu 4296 (成都赛区2012网络赛)
- 2012杭州网络赛
- hdu 4277 USACO ORZ(2012 ACM/ICPC Asia Regional Changchun Online 长春网络赛)
- hdu 4738 2013杭州网络赛一题
- hdu 4272 2012长春赛区网络赛 dfs暴力 ***