题意:
给一个字符矩阵,行列都可以折叠,要求是折叠线的两边对称,折叠线上不能有字符。如 11 11 11折叠后可以变成 1 1 1。
考虑 m a n a c h e r manacher manacher?首先我们考虑一下 n = 1 n=1 n=1的时候怎么计算答案?首先可以用 m a n a c h e r manacher manacher算法求出每个位置为中心的最长回文串,然后考虑把折纸转化一下,转化成剪纸。考虑到折过去的的一小部分对以后是没有影响的。所以我们可以从左到右枚举点,考虑这个点能折到的左端点,那么只要左端点到这个点之间有一点 k k k是满足 1 − k 1-k 1−k可以折,那么这个点就是可行的。
右边同理。然后就可以左边的可行点前缀和,然后枚举最后一次折的中点,计算答案即可。
还有列没有处理?仔细想发现行和列是互不影响的,再做一遍上述算法将答案相乘即可。
c o d e : code: code:

#include <bits/stdc++.h>
#define regi register int
int n,m;
char s[2000001];
unsigned long long h[2000001],l[2000001],p[2000001];
long long ls[2000001],rs[2000001],check[2000001];
int L[2000001];
inline int read(){int r=0,w=0,c;for(;!isdigit(c=getchar());r=c);for(w=c^48;isdigit(c=getchar());w=w*10+(c^48));return r^45?w:-w;
}
inline void manacher(int n,unsigned long long *a){for(regi i=1;i<=n;++i){p[i<<1]=a[i];p[i<<1|1]='*';}p[0]=p[(n<<1|1)+1]='~';p[1]='*';int len=n<<1|1;int mid=0,right=0;for(regi i=1;i<=len;++i){(i<right)?L[i]=std::min(L[2*mid-i],right-i):L[i]=1;for(;p[i-L[i]]==p[i+L[i]];++L[i]);if(right<i+L[i])mid=i,right=i+L[i];}for(regi i=1;i<=n;++i)L[i]=L[i<<1|1]>>1;
}
inline long long solve(int n,unsigned long long *a){manacher(n,a);long long ans=0;ls[0]=rs[n]=check[n]=1;for(regi i=1;i<=n;++i){//此处便是对于左端点的处理,没看懂解释的可以看注释int left=i-L[i]-1;//左端点int hav=ls[i-1]-(left>=0?ls[left]:0);//左端点到这个位置的前面一个位置之间是否有可行点,如果有的话,就可以按照1-可行点,可行点-当前点的顺序折ls[i]=ls[i-1]+(hav>0);//记录前缀和}for(regi i=n-1;i;--i){int right=i+L[i]+1;int hav=rs[i+1]-(right<=n?rs[right]:0);check[i]=hav>0;rs[i]=rs[i+1]+check[i];}for(regi i=1;i<=n;++i)ans+=ls[i-1]*check[i];return ans;
}
main(){n=read(),m=read();for(regi i=1;i<=n;++i){scanf("%s",s+1);for(regi j=1;j<=m;++j){h[i]=h[i]*131+s[j]-'a';l[j]=l[j]*131+s[j]-'a';}}printf("%lld\n",solve(n,h)*solve(m,l));return 0;
}

[ZROJ-955]折纸 Solution相关推荐

  1. 折纸 css_折纸:CSS 3D折叠图像库

    折纸 css Space on web pages is growing tighter as mobile development gains in popularity. In response, ...

  2. 地图旋转_折纸效果三维旋转,不一样的地图页设计

    我们在制作PPT或网页的过程中,有时候会用到地图来标记地点信息. 比如这样 ▲图片来自腾讯云官网 或者是这样 ▲图片来自全球敏捷运维峰会官网 今天就来给大家介绍一种地图页面的新玩法:三维折纸地图. 听 ...

  3. 折纸机器人的步骤图解_折纸图解飞机

    折纸王子帮你找折纸图解 你好,我是折纸王子,欢迎来到我的公众号. 折纸王子教你折纸,讲解详细,演示清楚,容易听懂,一学就会. 往期精彩: 圣诞节剪纸折纸大全43款 万圣节折纸大全专辑 29款 折纸张口 ...

  4. 手工纸盒子_【创意手工】怒赞!如此有趣的儿童折纸,你不学我学!

    折纸糖果盒子 基本的盒子制作方法,这里给大家做了一个简略图,很方便很快的可以完成制作.纸张的大小和后面制作糖果盒子的部分相同,然后用美工刀严则会两个边缘向内裁切大约0.2到0.3厘米.这样就会使得这个 ...

  5. 每天学一点flash(71)折纸

    今晚,写了一个程序,不知道打算起什么名字,看到这种像折纸的形状,将就叫折纸效果.这组图形是拼接出来的效果,有的像古代那种屏风门.要是我们想象不到,也可以用纸来折叠这种的形状. 制作的过程当中,一方面需 ...

  6. 哈佛研究人员开发基于折纸造型高精度微型手术机器人

    近年来,机器人已经在外科手术中扮演了越来越重要的角色.在拓展医生能力的同时,还可带来更高的手术精度和控制水平. 本文要为大家介绍的,就是由哈佛大学怀斯研究所副教授 Robert Wood 博士开发的一 ...

  7. 折纸计算机大全,神之折纸电脑版

    游戏介绍 <神之折纸电脑版>是一款创意独特的益智休闲手游,风格沿袭了清新的简约剪纸风,日式手绘画面,同样营造出一种温馨的气氛.游戏玩法也很简单,你需要在尽量少的步数内将屏幕中的折纸打开,铺 ...

  8. 折纸机器人的步骤图解_折纸图解老虎

    折纸王子帮你找折纸图解 你好,我是折纸王子,欢迎来到我的公众号. 折纸王子教你折纸,讲解详细,演示清楚,容易听懂,一学就会. 往期精彩: 圣诞节剪纸折纸大全43款 万圣节折纸大全专辑 29款 折纸张口 ...

  9. 纸的大小图解_折纸大全图解基础之如何裁切美元尺寸纸张

    本育儿文章是育儿天堂最新发布的<折纸大全图解基础之如何裁切美元尺寸纸张>的详细页面,觉得有用就收藏了,这里给大家转摘到育儿天堂,为了大家阅读方便. 折纸大全图解中有一类折纸教程是比力奇特的 ...

最新文章

  1. 盐噪声和胡椒噪声的区别_为什么加一点盐对您的密码很有用(但不包括胡椒粉!)
  2. 从Hexo迁移到Hugo附送漂亮的Hugo Theme主题
  3. datagrip调试存储过程_PLC控制柜是什么?当PLC程序设置完后,如何调试能不烧毁PLC?...
  4. 锁定 ASP.NET 配置设定
  5. mysql+代码备份,一个很简单的MYSQL数据库备份脚本代码
  6. 沈梦辰回应闲鱼卖假货事件:负责到底 不做一锤子买卖
  7. 搭建Nginx+PHP环境
  8. softmax回归的从零开始实现-09-p4
  9. 学python能做什么类型的工作-学点Python,让你的求职简历更有含金量!
  10. 程序员面试金典——5.1二进制插入
  11. matlab基于dct的图像压缩编码解码_基于深度学习的视频压缩方法简介
  12. js 生成二维码并点击下载
  13. Pycharm中Python包的下载与使用
  14. 第一次初学游泳+自我总结+小窍门
  15. SurfacePro6解决亮度自动调节问题
  16. python_多点拟合曲线并计算曲率半径
  17. Vue:把组件作为自定义元素来使用以及Identifier ' simple_couter' is not in camel case问题解决
  18. 硬件-5-长虹电视55A1U
  19. Canvas绘制任意正多边形
  20. 区块链与普通的链有什么区别?

热门文章

  1. 安卓应用在各大应用市场上架方法
  2. rog主板php,强劲的扩展能力 - 华硕ROG Zenith Extreme主板评测:地表最强X399 - 超能网...
  3. 服务器主板准系统怎么拆,主板准系统及电源装箱步骤完成_技嘉 GA-B85M-D3V_主板评测-中关村在线...
  4. 线上支付对接(支付宝篇)
  5. Vue视频插件vue-video-player的使用
  6. mono for andriod 自动提示输入控件AutoCompleteTextView
  7. Idea自定义注释、作者一键生成详细介绍
  8. 正式对标苹果,小米 12 系列三箭齐发,MIUI 欲成为跨设备操作系统
  9. win7家庭版和旗舰版区别_Win7 ultimate是什么版本?ultimate是什么意思功能区别介绍!...
  10. 从程序中学习UKF-SLAM(二)