bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形(枚举)
2017-09-14 12:59
429 查看
1661: [Usaco2006 Nov]Big Square 巨大正方形
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 467 Solved: 230
[Submit][Status][Discuss]
Description
农民 John 的牛参加了一次和农民 Bob 的牛的竞赛。他们在区域中画了一个N*N 的正方形点阵,两个农场的牛各自占据了一些点。当然不能有两头牛处于同一个点。农场的目标是用自己的牛作为4个顶点,形成一个面积最大的正方形(不必须和边界平行) 。 除了 Bessie 以外,FJ其他的牛都已经放到点阵中去了,要确定bessie放在哪个位置,能使得农民约翰的农场得到一个最大的正方形(Bessie不是必须参与作为正方形的四个顶点之一)。Input
* Line 1: 一个整数 N,2<=N<=100* Lines 2..N+1: 第 i+1 行描述点阵的第i行,有 N 个字符。字符集是: 'J' 表示这个点是农民 John 的牛, 'B'表示这个点是农民 Bob 的牛, '*' 表示这个点没有被占据。保证至少有一个点没有被占据。
Output
* Line 1: 最大正方形的面积,或者无解的话输出0。Sample Input
6J*J***
******
J***J*
******
**B***
******
Sample Output
4一个正方形只要满足三个顶点是J,第四个顶点不是B就符合要求
所以可以暴力枚举相邻的两个J,然后判断另外两个点是否满足条件就好了
#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; typedef struct { int x; int y; }Point; Point s[10005], a, b; char str[105][105]; int main(void) { int n, i, j, ans, cnt = 0; scanf("%d", &n); for(i=1;i<=n;i++) { scanf("%s", str[i]+1); for(j=1;j<=n;j++) { if(str[i][j]=='J') s[++cnt].x = i, s[cnt].y = j; } } ans = 0; for(i=1;i<=cnt;i++) { for(j=i+1;j<=cnt;j++) { a.y = s[i].y+(s[j].x-s[i].x); a.x = s[i].x+(s[i].y-s[j].y); b.y = s[j].y+(s[j].x-s[i].x); b.x = s[j].x+(s[i].y-s[j].y); if(a.x<1 || a.x>n || a.y<1 || a.y>n || b.x<1 || b.x>n || b.y<1 || b.y>n) continue; if(str[a.x][a.y]=='J' && str[b.x][b.y]!='B' || str[a.x][a.y]!='B' && str[b.x][b.y]=='J') ans = max(ans, (s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)); } } for(i=1;i<=cnt;i++) { for(j=i+1;j<=cnt;j++) { a.y = s[i].y-(s[j].x-s[i].x); a.x = s[i].x-(s[i].y-s[j].y); b.y = s[j].y-(s[j].x-s[i].x); b.x = s[j].x-(s[i].y-s[j].y); if(a.x<1 || a.x>n || a.y<1 || a.y>n || b.x<1 || b.x>n || b.y<1 || b.y>n) continue; if(str[a.x][a.y]=='J' && str[b.x][b.y]!='B' || str[a.x][a.y]!='B' && str[b.x][b.y]=='J') ans = max(ans, (s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)); } } printf("%d\n", ans); return 0; } /* 6 J***** ****** J***** ****** ****** ****** ****** */
相关文章推荐
- bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形 (枚举)
- bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形【枚举】
- |BZOJ 1661|暴力|[Usaco2006 Nov]Big Square 巨大正方形
- bzoj:1661 [Usaco2006 Nov]Big Square 巨大正方形
- 【BZOJ】1661: [Usaco2006 Nov]Big Square 巨大正方形(暴力)
- bzoj 1661 [Usaco2006 Nov]Big Square 巨大正方形
- bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形 解题报告
- 1661: [Usaco2006 Nov]Big Square 巨大正方形
- bzoj 1662: [Usaco2006 Nov]Round Numbers 圆环数(枚举)
- 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
- 【BZOJ 1660】 [Usaco2006 Nov]Bad Hair Day 乱发节
- bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节【单调栈】
- 【BZOJ1660】【Usaco2006 Nov】Bad Hair Day 乱发节
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压DP)
- bzoj1726 [Usaco2006 Nov]Roadblocks第二短路
- bzoj1726 [Usaco2006 Nov]Roadblocks第二短路(spfa)
- 【bzoj1724】[Usaco2006 Nov]Fence Repair切割木板
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排【状压dp】
- BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路( 最短路 )
- BZOJ 1724 [Usaco2006 Nov]Fence Repair 切割木板