博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CTSC2014 && 洛谷P4503 企鹅QQ
阅读量:4459 次
发布时间:2019-06-08

本文共 1474 字,大约阅读时间需要 4 分钟。

很好,我又来写题解了。

这次介绍的是一道叫做企鹅QQ的题目(洛谷给的标签是省选/NOI-)其实我觉得没那么夸张啦(然而wa了3次 逃】)。

先放题面。

然后是数据,洛谷惯例?样例极水!

Input

 

4 3 64Faxfaxmaxmac

 

Output

4

 


  那么切入正题。

  这题乍一看似乎很简单的样子,感觉思路很简单,暴力枚举每一位是不是一样就行。但是,这样的话肯定复杂度就上了O(n2),光速TLE;

  那么我就要考虑一下更优的算法了-->将前缀和的思想加入到hash中。

  然后分别按照从前往后的顺序和从后往前的顺序生成两个hash数组。这样用O(n)的时间就可以完成预处理。

 

  然后我们考虑枚举哪一位是不相同的,比较将这一位删去后的串的hash值是否相等,那么这个hash值我们可以借助两个hash数组在O(1)的时间内算出来;

  设这一位是j,那么我们只需要将hash1[j-1]hash[j+1]的值加起来就可以得到删除掉一维之后的hashh值。

  当然这两个hash数组都必须是二维的,上面的hash表示其中第二维,第一维的意义是字符串的编号。

 

  然而,这就结束了吗?那可是 省选 谢谢。

  如果在比较的时候,你写的很暴力的话,还是会TLE(亲身实践请勿模仿QAQ),所以我们使用sort将其排序,比较相邻的hash值,这样可以节省时间。

  算法的总时间复杂度就是O(nl\log n),差不多显然能过。

 


放上代码

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef unsigned long long ll;int n,l,s,ans;ll hh[30001],hsh[30001][201],hsh2[30001][201];char a[30001][201];void rd(int i) { for(int j=1;j<=l;j++) hsh[i][j]=hsh[i][j-1]*131+a[i][j]; for(int j=l;j>=1;j--) hsh2[i][j]=hsh2[i][j+1]*137+a[i][j]; return;}int main(){ scanf("%d%d%d",&n,&l,&s); for(int i=1;i<=n;i++) { scanf("%s",a[i]+1); rd(i); } for(int i=1;i<=l;i++) { for(int j=1;j<=n;j++) hh[j]=hsh[j][i-1]*233+hsh2[j][i+1]*211; sort(hh+1,hh+n+1); int sun=1; for(int j=1;j

虽然,我的这份代码在没有优化的情况下不是最优的(但是你会更优的又怎么会看题解??)但是绝对AC没问题的。

并且,它在开启氧气(O2)的情况下-->

偷偷告诉你们,其实最优解第一个-->感觉也没有快多少 ~?无耻.jpg

所以加油啦!!

 

转载于:https://www.cnblogs.com/qxyzili--24/p/10482862.html

你可能感兴趣的文章
苹果开发者帐号(Company)申请流程
查看>>
ubuntu18.04完全卸载mysql的命令
查看>>
hdu (2617) Happy 2009
查看>>
Mybatis(5)——动态SQL
查看>>
nodejs 构建本地web测试服务器 以及 解决访问静态资源的问题!有完整源码!
查看>>
Android 勤用RXJava compose操作符消除重复代码
查看>>
BaseFragment
查看>>
QQ网站接入
查看>>
Android自定义控件 开源组件SlidingMenu的项目集成
查看>>
android中的textview显示汉字不能自动换行的一个解决办法
查看>>
Android sqlite日期存储
查看>>
简单实例一步一步帮你搞清楚MVC3中的路由以及区域
查看>>
如何在Eclipse配置Tomcat服务器
查看>>
HDU 1018 Big Number
查看>>
周记(2015-11-22 -- 2015-11-27)
查看>>
面试JS
查看>>
2014年最佳的10款 PHP 开发框架
查看>>
Bower快速学习
查看>>
Spring Cloud学习笔记-003
查看>>
JQuery语法总结和注意事项
查看>>