SPOJ - PLSQUARE

洛谷——SP1-TEST - Life, the Universe, and Everything +注册SPOJ的方法 C++ 阅读详情

【题目链接】 点击打开链接

【题意】给了一个n*n的字符矩阵,求最大的k使得存在一个k*k的子矩阵,满足这个k*k的矩阵里横和竖的所有字符串都是回文串。

【解题方法】Wannafly群赛题。详细解题方法看这里点击打开链接

                      大致的方法就是分为两个dp,第一个dp处理对于行和列的任意一个下标处理这两个下标之间的字符串是否为回文串,第二步的dp是枚举一个矩形的坐标和他延伸的长度为k的字串,判断是否为回文串,并更新dp值。然后处理完这个过程之后,我们再枚举行列,长度更新最后的最大答案。这个dp比较绕,文字比较难描述,视频已经讲解的很清楚了。

【复杂度】 O(n^3)

【AC代码】

//
//Created by just_sort 2016/12/30
//Copyright (c) 2016 just_sort.All Rights Reserved
//

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream> //isstringstream
#include <iostream>
#include <algorithm>
using namespace std;
using namespace __gnu_pbds;
typedef long long LL;
typedef pair<int, LL> pp;
#define REP1(i, a, b) for(int i = a; i < b; i++)
#define REP2(i, a, b) for(int i = a; i <= b; i++)
#define REP3(i, a, b) for(int i = a; i >= b; i--)
#define MP(x, y) make_pair(x,y)
const int maxn = 1000010;
const int maxm = 2e5;
const int maxs = 10;
const int INF = 1e9;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>order_set;
//head
int n;
char s[222][222];
int r[222][222][222], c[222][222][222], rdp[222][222][222], cdp[222][222][222];

int main()
{
    while(scanf("%d", &n) != EOF)
    {
        memset(r, 0, sizeof(r));
        memset(c, 0, sizeof(c));
        memset(rdp, 0, sizeof(rdp));
        memset(cdp, 0, sizeof(cdp));
        REP2(i, 1, n) scanf("%s", s[i] + 1);
        REP2(i, 1, n){
            REP3(j, n, 1){
                REP2(k, j, n){
                    if(s[i][j] == s[i][k]){
                        if(j + 1 >= k - 1) r[i][j][k] = 1;
                        else if(r[i][j+1][k-1]) r[i][j][k] = 1;
                    }
                }
            }
        }
        REP2(j, 1, n){
            REP3(i, n, 1){
                REP2(k, i, n){
                    if(s[i][j] == s[k][j]){
                        if(i + 1 >= k - 1){
                            c[j][i][k] = 1;
                        }
                        else if(c[j][i+1][k-1]){
                            c[j][i][k] = 1;
                        }
                    }
                }
            }
        }
        REP3(i, n, 1){
            REP2(j, 1, n){
                REP2(k, 1, n + 1 - j){
                    if(r[i][j][j + k - 1]){
                        rdp[i][j][k] = rdp[i+1][j][k] + 1;
                    }else{
                        rdp[i][j][k] = 0;
                    }
                }
            }
        }
        REP3(j, n, 1){
            REP2(i, 1, n){
                REP2(k, 1, n + 1 - i){
                    if(c[j][i][i + k - 1]){
                        cdp[j][i][k] = cdp[j+1][i][k] + 1;
                    }
                    else{
                        cdp[j][i][k] = 0;
                    }
                }
            }
        }
        int ans = 0;
        REP2(i, 1, n){
            REP2(j, 1, n){
                REP2(k, 1, n){
                    if(rdp[i][j][k] >= k && cdp[j][i][k] >= k){
                        ans = max(ans, k);
                    }
                }
            }
        }
        cout << ans << endl;
    }
    return 0;
}


用Brainfuck挑战SPOJ第一题:从‘超时’到‘怀疑人生’的调试血泪史 本文分享了使用Brainfuck语言在SPOJ平台上解决第一题‘TEST’的调试经历,揭示了性能优化的关键技巧。通过对比不同实现方案的性能差异,探讨了循环展开、内存访问优化等策略,最终成功解决‘超时’问题。文章还分析了不同Brainfuck解释器的性能影响,为编程挑战提供了实用经验。 阅读详情

相关推荐

SPOJ:我对 SPOJ 问题的解决方案 (www.spoj.com)

SPOJ( )上选定问题的解决方案

SPOJ简介

SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台。  SPOJ题目分类:classical,challenge,partial,tutorial。  1)classical:ACM题型,通过所有数据才能算AC  2)challenge:有趣的题目,每个题目有不同的评分标准(代码长短,效果好坏,速度等),...

weixin_34183910的博客 1005

SPOJ_tasks

SPOJ_任务 SPOJ的任务

如何注册 SPOJ

wrong or unfilled captcha解决方法。这篇文章将会带你解决 SPOJ 注册时,报错 `wrong or unfilled captcha` 的问题,同时它也是一个 SPOJ 注册的小教程。如果你觉得它为你带来了帮助,请将它分享给他人。

zhengqingyu0311 的小屋 6832

SPOJ:Python中SPOJ问题的解决方案

联系 Python中SPOJ问题的解决方案。

一个很很很简单的验证码

呵呵,刚毕业没多久,也不会怎么写验证码,问问别人思路,用好久才写出来个验证码,还很是简单的一个,各位大大别笑话啊....

SPOJ的账号注册方法

添加成功后打开插件>点击蓝色的新增按钮。在浏览器找到>更多工具>扩展程序。接着你就可以顺利注册SPOJ账号。然后解压文件并用文件夹打包好。打开开发者模式,添加这个插件。接着在匹配模式添加以下网址。在目标网址添加以下网址。

[小吉祥物]白麟 3857

SPOJ.rar_SPOJ

Online Judge Problem solution VN.SPOJ

如何注册 SPOJ?

这篇文章将会带你解决 SPOJ 注册时,报错的问题,同时它也是一个 SPOJ 注册的小教程。如果你觉得它为你带来了帮助,请将它分享给他人。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALcVKVaO-1692670942313)(https://badges.toozhao.com/badges/01G244N9NWG7YBAV5ZQD5D2KR2/blue.svg)] (哇 怎么都这么多了)

chicken_fbl 的博客 3612

产业园区运营负责人如何实现创新资源的系统化配置?.docx

产业园区运营负责人如何实现创新资源的系统化配置?

cp:一些SPOJ问题的解决方案

cp:一些SPOJ问题的解决方案

SPOJ - PLSQUARE Palin Squar(hash+回文串)

题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少 题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在的值是否成立,从大到小枚举就好 当枚举值为k时就转换为判断k是否为所求矩阵,判断时我们需要枚举每个点,(看从这个点开始是否向右向下都有连续k个回文串) 而我们可以分别找向右和向下,标记这个...

weixin_34075551的博客 130

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)

本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。

milk5的博客 900

SPOJ - Palin Square【预处理+枚举】

PLSQUARE - Palin Square #dynamic-programming #hashing Kids just learnt about palindrome strings yesterday. Today, the teacher today was going to teach them about square shapes.  But kids we

Jstyle的博客 426

深入理解光流法外推雷达回波

背景介绍 鉴于本人实在太过疲惫和劳累,一些简单的便于理解的废话就不在记录,耗费两天时间研究了一下光流法,本帖用于记录学习过程中源码的难点细节。 使用光流预测的核心有两个利用多张连续回波图像(变分)或者相邻两张回波图(交叉相关,LK等)计算出光流场(速度矢量场),之后利用半拉格朗日方法进行外推。 半拉格朗日方法 三时间步半拉格朗日方法,其核心公式如下 但这个有点难理解,但看一维的图就很好理解 它的核心就是迭代求Am(位移矢量),如果理解困难的话,其实质上就是通过未来迭代(猜)出当前时刻的Am找到过去的假设

weixin_44695861的博客 6035

天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字

天地图

肖肖肖丽珠的博客 1513

SPOJ TSUM 容斥原理 + FFT

题意 传送门 SPOJ TSUM 题解 若三元组无约束,则令 A(x)=∑xaiA(x)=\sum x^{a_i}A(x)=∑xai​,答案为 [xs]A3(x)[x^s]A^3(x)[xs]A3(x)。 考虑 i<j<ki<j<ki<j<k,那么需要减去存在相同项的乘积的贡献。简单起见,令 A(x)=∑xA(x) = \sum xA(x)=∑x,和式中的不同变量代表不同的项。根据容斥原理 (∑x)3=∑x3+3∑x2y+6∑xyz(\sum x)^3 =\sum x^

neweryyy的博客 301

《寻秦OL》.ani动画逆向解析:二进制结构与Unity重实现

动画文件格式是游戏资源逆向的核心入口,其本质是一组按特定规则组织的二进制数据流。理解魔数识别、字节序、字段对齐与差分编码等底层原理,是解析非标准格式的关键前提。技术价值在于绕过黑盒协议,直接从静态客户端提取可验证的原始语义;典型应用场景包括老游戏复刻、美术资产抢救、引擎跨平台迁移及教学级逆向训练。本文以《寻秦OL》的`.ani`文件为实例,深入剖析其C风格结构布局、GB2312中文命名、16位定点数旋转表示及帧主序差分存储机制,并基于C#在Unity中完成从字节流到AnimationClip的端到端重建,覆

weixin_30368981的博客 641

OI/ACM 刷题网站 人气OJ简介

SPOJ简介   SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台。   SPOJ题目分类:classical,challenge,partial,tutorial。   1)classical:ACM题型,通过所有数据才能算AC   2)challenge:有趣的题目,每个题

在思索中前行! 5079

Labview实现服务器(server)与多客户端(clients)通信

服务器可以接收多个客户端发送的消息,并显示消息来源。 服务器可以发送消息到指定客户端 客户端可以自动连接服务器,断连后重连 客户端可以发送消息到服务器,可接收服务器消息 类似框架可以用做中央服务器及客户端项目

u013809089的博客 7980

PicoRV32 笔记 05

PicoRV32 本地总线接口

jjinl的专栏 1575

SPOJ - TSUM 母函数+FFT+容斥

题意:n个数,任取三个加起来,问每个可能的结果的方案数。 题解:构造母函数ABC,比如现在有 1 2 3 三个数。则 其中B表示同一个数加两次,C表示用三次。然后考虑去重。 A^3表示可重复地拿三个。(无顺序) 然后我们去掉拿了两个相同的方案A*B,由于有三种顺序(xxy,xyx,yxx) 所以*3 最后再加上多减了的 拿三个相同的的方案C,一共减了三次,多减了两次所以...

Vincent19999999的博客 221

基于数字图像处理方法的迷宫问题图解 : 基于骨架提取、四邻域

问题是,这条红色的线是人为标记出来的能通的路线,对计算机来看,黑色和红色的线没有任何差异,所以之前的想法压根不起作用。对应于数字图像的表达,就是从远离主干的分支端点出发,如果4邻域中只有一个可以通的道路,那么这个点在分支上。闪电划过,有一道连接了天空和大地,就是迷宫的解,其余的分支就是迷宫中对应的死路。类似这个闪电图,假设图中最粗的主干(迷宫解的路线)是最先形成的,其余的细小的分支是慢慢从主干上形成的。因此,只要在端点的4邻域中,找到可以走的道路,那么一定就是分支,也就是要移除的路线。

Henry的博客 2075
上一篇: SPOJ - Horace and his primes(素数+二分查找)
下一篇: uvalive 6955 Finding Lines rand() 随机算法
just_sort
博客等级 码龄11年 2358粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值