HDU 4414 Finding crosses(爆搜)
2017-04-23 20:00
351 查看
思路:
枚举十字路口中心的位置。判断上下左右是否分别满足条件。#include <iostream> #include <cstdio> #include <string.h> #include <cmath> #include <map> #define eps 1e-9 typedef long long int lli; using namespace std; int ma[60][60]; char s[200]; int ans; int flag = 0; int dir[4][2] = { -1,0, 1,0, 0,-1, 0,1 }; int cnt[4]; int check(int ii,int jj,int d1,int d2,int cnt){ if(ma[ii][jj] != 1) return cnt-1; if(ma[ii+d2][jj+d1] == 1 || ma[ii-d2][jj-d1] == 1){ flag = 0; return 0; } return check(ii+d1,jj+d2,d1,d2,cnt+1); } void che(int ii,int jj){ flag = 1; for(int i = 0;i < 4;i++){ cnt[i] = check(ii+dir[i][0],jj+dir[i][1],dir[i][0],dir[i][1],1); } if(cnt[0] != cnt[1] || cnt[2] != cnt[3]) flag = 0; if(flag == 1 && cnt[0] != 0 && cnt[2] != 0) ans++; } int main(){ int n; while(scanf("%d",&n),n){ ans = 0; memset(ma,0,sizeof(ma)); for(int i = 1;i <= n;i++){ scanf("%s",s); for(int j = 0;s[j];j++){ if(s[j] == '#'){ ma[i][j+1] = 1; } } } for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(ma[i][j] == 1){ che(i,j); } } } printf("%d\n",ans); } }
相关文章推荐
- HDU-4414 Finding crosses 水题
- hdu 4414 Finding crosses(搜索)
- HDU 4414 Finding crosses (DFS + BFS)
- hdu 4414 Finding crosses【简单模拟】
- HDU 4414 Finding crosses 暴力枚举
- HDU 4414: Finding crosses
- hdu 4414 Finding crosses【简单模拟】
- hdu-4414-Finding crosses
- HDU 4414 Finding crosses (DFS + BFS)
- HDU 4414 Finding crosses(dfs)
- hdu 4414 Finding crosses
- hdu 4414 Finding crosses(模拟)
- HDU 4414 Finding crosses
- HDU 4414 Finding crosses (暴力模拟)
- HDU 4414 Finding crosses(暴力判断)
- hdu 4414 Finding crosses 简单搜索
- HDU 4414 Finding crosses
- HDU 4414 Finding crosses(搜索)
- HDU 4414 Finding crosses(搜索)
- hdu 4414 Finding crosses