ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)
1057: Beautiful Garden
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 25 Solved: 12
[Submit][Status][Web
Board]
Description
There's a beautiful garden whose size is n × m in Edward's house. The garden can be
partitioned into n × m equal-sized square chunks. There are some kinds of flowers
planted in each square chunk which can be represented by using lowercase letters.
However, Edward thinks the garden is not beautiful enough. Edward wants to build a
water pool in the garden. So that the garden would look like symmetric (both
horizontally and vertically). The water pool is a rectangle whose size is p × q and the
center of the water pool is also the center of the garden.
Something else important you should know is:
n, m, p and q are all even.
p is always less than n.
q is always less than m.
The borders of the water pool are parallel to the border of garden.
Edward wants to know how many different pairs of (p, q) he can choose.
Input
There are multiple test cases. The first line of input contains an integer T indicating
the number of test cases. For each test case:
The first line contains two integers n and m (1 <= n, m <= 2000, n and m are even),
indicating the size of the garden. For next n lines, each line contains m characters
showing the garden.
It is guaranteed that only lowercase letters will appear.
Output
For each test case, output an integer indicating the number of choices to build the
water pool.
Sample Input
3
6 8
acbbbbca
dcaccacd
cdaddadc
cdaddadc
dcaccacd
acbbbbca
6 8
acbcbbca
dcaccacd
cdaddadc
cdaddadc
dcaccacd
acbbbbca
6 8
acbbbbca
dcadcacd
cdaddadc
cdaddadc
dcaccacd
acbbbbca
Sample Output
6
0
3
HINT
For the first sample, you have following six choices (blank rectangle means the water
pool): .png)
很蛋疼的一道题,需要仔细调试。还有具体怎么计算呢?若下标均从0开始,显然上面的可抹除部分有2行(1与2),3列(1,2,3),那么答案就是2*3,其他情况均用这种办法求解。
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
char pos[2009][2009];
int hang,lie;
inline bool huiwen(const char s[])
{
int len=strlen(s);
int i;
for (i=0; i<len/2;i++)
{
if(s[i]!=s[len-1-i])
return false;
}
return true;
}
int main(void)
{
int t,i,j,l,r;
scanf("%d",&t);
while (t--)
{
memset(pos,0,sizeof(pos));
scanf("%d%d",&hang,&lie);
for (i=0; i<hang; i++)
{
scanf("%s",pos[i]);
}
l=hang/2-1;
r=lie/2-1;
for (i=0; i<hang/2; i++)//判断上下是否相同且回文
{
if( (strcmp(pos[i],pos[hang-1-i])!=0) || (!huiwen(pos[i])) || (!huiwen(pos[hang])))
{
l=i;
break;
}
}
bool ok=0;
for (i=0; i<lie/2; i++)//列相同判断
{
for (j=l; j<=hang-1-l; j++)
{
if(pos[j][i]!=pos[j][lie-1-i])
{
r=i;
ok=1;
break;
}
}
if(ok)
break;
}
for (i=0; i<r; i++)//列回文判断(放到上面的for里十分麻烦,独立出来判断)
{
for (j=l; j<hang/2; j++)
{
if(pos[j][i]!=pos[hang-1-j][i])
{
r=min(r,i);//肯定要取小的那列
ok=1;
break;
}
}
if(ok)
break;
}
printf("%d\n",l*r);//输出答案
}
return 0;
}
ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)的更多相关文章
- ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)
问题 A: (ds:队列)打印队列 时间限制: 1 Sec 内存限制: 128 MB 提交: 25 解决: 4 [提交][状态][讨论版] 题目描述 网络工程实验室只有一台打印机,它承担了非常繁重 ...
- ACM程序设计选修课——1030: Hungar的时尚球场(水题+耐心)
1030: Hungar的时尚球场 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 14 Solved: 8 [Submit][Status][Web ...
- ACM程序设计选修课——1076汇编语言(重定向+模拟)
1076: 汇编语言 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 34 Solved: 4 [Submit][Status][Web Board] ...
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵 【模拟】
链接:https://www.nowcoder.com/acm/contest/90/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)
Problem D: (ds:树)合并果子 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 80 Solved: 4 [Submit][Status][ ...
- ACM程序设计选修课——1041: XX's easy problem(神烦的多次字符串重定向处理)
1041: XX's easy problem Time Limit: 1 Sec Memory Limit: 128 MB Submit: 41 Solved: 7 [Submit][Statu ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)
问题 E: (ds:图)公路村村通 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...
- ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)
问题 F: (ds:图)旅游规划 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
随机推荐
- Unity中的各种寻找GameObject方法归纳
1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mono ...
- JS给数字加千位分隔符
本文原链接:https://www.jianshu.com/p/928c68f92c0c JavaScript实现千位分隔符 将普通的数字转换为带千位分隔符格式的数字字符串是一个非常常见的问题,千位分 ...
- Asp.Net Core 进阶(四)—— 过滤器 Filters
一.介绍 Asp.Net Core Filter 使得可以在请求处理管道的特定阶段的前后执行代码,我们可以创建自定义的 filter 用于处理横切关注点. 横切关注点的示例包括错误处理.缓存.配置.授 ...
- UVa 12171 题解
英文题面不怎么友好,大家还是自行通过紫书了解题面吧... 解题思路: 1. 面对500 ^ 3的数据范围,我们需要先用离散化解决掉爆空间的问题. 2. 由于我们要求的总体积包括内空部分的体积,我们可以 ...
- Mycat高可用解决方案二(主从复制)
Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...
- fread()创建文件和file_exists()文件缓存问题
①fread('','w')调用当文件不存在时创建文件,其中参数使用了fread('',"w")导致无法创建文件,修改单引号之后操作正常. ②项目当中新建日志文件,需要判断日志文件 ...
- vue实现与安卓、IOS交互
方案背景 IOS用的是jsBridge插件实现调用.传参.回调的 安卓是在window挂载方法和挂载回调的 IOS实现方案 调用原生方法封装如下 function setupWebViewJavasc ...
- hdu 6312
Problem Description Alice and Bob are playing a game.The game is played on a set of positive integer ...
- Python中的并发
目录 Python并发 并发三种层次 协程 生成者消费者 新关键字 网络io 线/进程 例子 线程池 进程通信 并发池 future对象 executor对象 参考 Python并发 并发三种层次 个 ...
- Linux学习-编译前的任务:认识核心与取得核心原始码
什么是核心 (Kernel) Kernel 其实核心就是系统上面的一个文件而已, 这个文件包含了驱动主机各项硬 件的侦测程序与驱动模块. 核心文件通常被放置成 /boot/vmlinuz-xxx ,不 ...