problem 1245
来源:互联网 发布:杰士邦zero零感知乎 编辑:程序博客网 时间:2024/06/06 16:37
没考虑这么多,直接用搜索。打了半多小时交上去WA,看了好久。。。终于发现原来这题有个很faint的地方。举个例子就知道了:
左边这个家伙输进去出来的结果应该是1,而不是4。
3
#---#
#-#
-
Accepted 1245 C 00:00.02 404K
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
int expand(char* tr[],int bx,int by)
{
int i,j;
for (i = bx + 1; i <= n; i++)
{
for (j = by; j < by + 2 * (i - bx) + 1; j++)
if (tr[i][j] == '#') break;
if (j < by + 2 * (i - bx) + 1) break;
}
return i - bx;
}
int expand1(char* tr[],int bx,int by)
{
int i,j;
for (i = bx - 1; i >= 1; i--)
{
for (j = by; j > by - 2 * (bx - i) - 1; j--)
{
if ((j >= 2 * i - 1) || (j < 0)) break;
if (tr[i][j] == '#') break;
}
if (j > by - 2 * (bx - i) - 1) break;
}
return bx - i;
}
void solve()
{
int i,j,ans = 0;
char* tr[101];
for (i = n; i >= 1; i--)
{
tr[i] = (char*)malloc(sizeof(char) * (2*n));
scanf("%s",tr[i]);
}
for (i = 1; i <= n - ans; i++)
for (j = 0; j < i * 2 - 1; j += 2)
if (tr[i][j] == '-')
{
int temp = expand(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = n; i >= 2 * ans; i--)
for (j = 1; j < i * 2 - 1; j += 2)
if (tr[i][j] == '-')
{
int temp = expand1(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = 1; i <= n; i++) free(tr[i]);
printf("The largest triangle area is %d./n",ans * ans);
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1245.txt","r",stdin);
#endif
int t = 0;
while (scanf("%d",&n) != EOF && n != 0)
{
printf("Triangle #%d/n",++t);
solve();
printf("/n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}
#include<stdlib.h>
#include<string.h>
int n;
int expand(char* tr[],int bx,int by)
{
int i,j;
for (i = bx + 1; i <= n; i++)
{
for (j = by; j < by + 2 * (i - bx) + 1; j++)
if (tr[i][j] == '#') break;
if (j < by + 2 * (i - bx) + 1) break;
}
return i - bx;
}
int expand1(char* tr[],int bx,int by)
{
int i,j;
for (i = bx - 1; i >= 1; i--)
{
for (j = by; j > by - 2 * (bx - i) - 1; j--)
{
if ((j >= 2 * i - 1) || (j < 0)) break;
if (tr[i][j] == '#') break;
}
if (j > by - 2 * (bx - i) - 1) break;
}
return bx - i;
}
void solve()
{
int i,j,ans = 0;
char* tr[101];
for (i = n; i >= 1; i--)
{
tr[i] = (char*)malloc(sizeof(char) * (2*n));
scanf("%s",tr[i]);
}
for (i = 1; i <= n - ans; i++)
for (j = 0; j < i * 2 - 1; j += 2)
if (tr[i][j] == '-')
{
int temp = expand(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = n; i >= 2 * ans; i--)
for (j = 1; j < i * 2 - 1; j += 2)
if (tr[i][j] == '-')
{
int temp = expand1(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = 1; i <= n; i++) free(tr[i]);
printf("The largest triangle area is %d./n",ans * ans);
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1245.txt","r",stdin);
#endif
int t = 0;
while (scanf("%d",&n) != EOF && n != 0)
{
printf("Triangle #%d/n",++t);
solve();
printf("/n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}
- problem 1245
- problem
- Problem
- problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- 编程心得——窗口与窗口类
- SQL Server中Table的知识框架
- 对象序列化
- 很幽默的讲解六种Socket I/O模型
- 【转载】通信软件白盒测试的三种境界
- problem 1245
- 和网友讨论的ERP系统数据保密方案
- 建立字段为当前时间的表
- Intel IOMMU on Linux kernel
- 欣闻我班上的学生林健在Image Cup比赛中取得好成绩
- 哪位大侠能帮我解决一下,为什么二级关联能用,三级关联老是出错,谢谢了.
- C#.NET常用函数大全
- 动态调用 WebService
- Spirit+lucene+nutch