帖帖!!

emailed 2008-05-16 09:06:23
http://acm.tju.edu.cn/toj/showp2949.html
...全文
53 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
可口可乐 2008-05-17
  • 打赏
  • 举报
回复
优化了一下,速度提高很多
364596 2008-05-17 01:25:38 Accepted 2949 C++ 1.3K 0'01.25" 1212K brucesea


#include <iostream>
using namespace std;

#define N 301
bool matrix[N][N];

int nr, nc;

bool good(int i1, int j1, int size)
{
if ( (i1<0) || (j1<0) || (i1+size-1>=nr) || (j1+size-1>=nc) ) return false;

for (int k = 0; k < size; k++) {
if (matrix[i1][j1+k] != matrix[i1+size-1][j1+size-k-1]) return false;
if (matrix[i1+k][j1] != matrix[i1+size-k-1][j1+size-1]) return false;
}

return true;
}

int get()
{
int ms = -1;
for (int i = 0; i < nr; i++) {
for (int j = 0; j < nc; j++) {
if (ms != -1) {
int k = ms/2;
if (!good(i-k, j-k, 2*k+1)) continue;
}
for (int k = 1; ; k++) {
if (good(i-k, j-k, 2*k+1)) ms = max(ms, 2*k+1);
else break;
}
}
}

for (int i = 0; i < nr; i++) {
for (int j = 0; j < nc; j++) {
if (ms != -1) {
int k = ms/2;
if (!good(i-k, j-k, 2*k+2)) continue;
}
for (int k = 0; ; k++) {
if (good(i-k, j-k, 2*k+2)) ms=max(ms, 2*k+2);
else break;
}
}
}

return ms;
}

int main()
{
char pstr[N];
cin >> nr >> nc;
cin.getline(pstr, N);

for (int i = 0; i < nr; i++) {
cin.getline(pstr, N);
for (int j = 0; j < nc; j++) {
matrix[i][j] = (pstr[j] == '1') ? true : false;
}
}

cout << get() << endl;
return 0;
}

可口可乐 2008-05-16
  • 打赏
  • 举报
回复
以某一个点(i,j)作为中心,
边长逐渐递增,看所围的边是否满足条件,
满足边长就继续增加,
不满足就退出这个点,看下一个点



#include <iostream>
using namespace std;

bool matrix[400][400];
int nr, nc;

bool good(int i1, int j1, int size)
{
for (int k = 0; k < size; k++) {
if (matrix[i1][j1+k] != matrix[i1+size-1][j1+size-k-1]) return false;
if (matrix[i1+k][j1] != matrix[i1+size-k-1][j1+size-1]) return false;
}

return true;
}

int get()
{
int ms = -1;
for (int i = 0; i < nr; i++) {
for (int j = 0; j < nc; j++) {
for (int k = 1; ((i>=k)&&(j>=k)&&(i+k<nr)&&(j+k<nc)); k++) {
if (good(i-k, j-k, 2*k+1)) ms = max(ms, 2*k+1);
else break;
}
}
}

for (int i = 0; i < nr-1; i++) {
for (int j = 0; j < nc-1; j++) {
for (int k = 0; ((i>=k)&&(j>=k)&&(i+k+1<nr)&&(j+k+1<nc)); k++) {
if (good(i-k, j-k, 2*k+2)) ms=max(ms, 2*k+2);
else break;
}
}
}

return ms;
}

int main()
{
char pstr[400];
cin >> nr >> nc;
cin.getline(pstr, 400);

for (int i = 0; i < nr; i++) {
cin.getline(pstr, 400);
for (int j = 0; j < nc; j++) {
matrix[i][j] = (pstr[j] == '1') ? true : false;
}
}

cout << get() << endl;
return 0;
}
emailed 2008-05-16
  • 打赏
  • 举报
回复
那是链接
  • 打赏
  • 举报
回复
???帖子

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧