【传送门:BZOJ3555】


简要题意:

  给出n个字符串长度为m,给出字符串的字符种数,求出相似的字符串个数

  相似字符串的定义为:相同位置上两个字符串有且只有一个字符不相同时,两个字符串相似


题解:

  乱搞搞,因为题目描述中说明会给出字符种数,就把各种字符按照出现的顺序编一下号,然后我就想成是(字符种数+1)进制来做,先处理一下前缀和,后缀和,然后枚举i,表示第i位不同,那么我们就先忽略第i位的字符,然后保存左边的字符串和右边的字符串(用(字符种数+1)进制来表示),然后按照左边的大小排序,左边相同时,按照右边的大小排序,然后就判断左右都相等的字符串的个数

  注意假设当前我们得到了有x个字符串是相等的时候,那么相似的个数为x*(x-1)/2

  题目20s,19s跑过去,RP++


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
char st[210];
LL l[31000][210];
LL r[31000][210];
struct node
{LL l,r;
}cnt[31000];
LL cc[210];
int cmp(const void *xx,const void *yy)
{node n1=*(node *)xx;node n2=*(node *)yy;if(n1.l<n2.l) return -1;if(n1.l>n2.l) return 1;if(n1.r<n2.r) return -1;if(n1.r>n2.r) return 1;return 0;
}
int main()
{int n,m,d;scanf("%d%d%d",&n,&m,&d);memset(cc,0,sizeof(cc));int len=0;for(int i=1;i<=n;i++){scanf("%s",st+1);for(int j=1;j<=m;j++) if(cc[st[j]]==0) cc[st[j]]=++len;l[i][0]=0;r[i][m+1]=0;for(int j=1;j<=m;j++) l[i][j]=l[i][j-1]*(d+1)+cc[st[j]];for(int j=m;j>=1;j--) r[i][j]=r[i][j+1]*(d+1)+cc[st[j]];}int ans=0;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++) cnt[j].l=l[j][i-1],cnt[j].r=r[j][i+1];qsort(cnt+1,n,sizeof(node),cmp);int dd=1;for(int j=2;j<=n;j++){if(cnt[j].l==cnt[j-1].l&&cnt[j].r==cnt[j-1].r) dd++;else{ans+=dd*(dd-1)/2;dd=1;}}ans+=dd*(dd-1)/2;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Never-mind/p/7878869.html

BZOJ3555: [Ctsc2014]企鹅QQ相关推荐

  1. 【BZOJ3555】[Ctsc2014]企鹅QQ hash

    [BZOJ3555][Ctsc2014]企鹅QQ Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础, ...

  2. [Ctsc2014]企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description ...

  3. 洛谷 P4503 [CTSC2014]企鹅QQ 解题报告

    P4503 [CTSC2014]企鹅QQ 题目背景 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即 ...

  4. 【bzoj3555】[Ctsc2014]企鹅QQ 简单哈希

    传送门 题目分析 题意即求有多少对字符串只相差一个字符,枚举删除每个字符后的哈希, 看有多少相等即可. 比如有如下字符串:$Sd123$,其中S部分的哈希值为H,删除的是d,则原字符串的哈希值为$$( ...

  5. 【CTSC2014】【BZOJ3555】企鹅QQ

    Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大 ...

  6. 【bzoj3555】[Ctsc2014]企鹅QQ

    题目描述: PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能 ...

  7. luoguP4503 [CTSC2014]企鹅QQ hash

    既然只有一位的不同,那么我们可以枚举这一位.... 我们只需要快速地计算去掉某一位的$hash$值.... 由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只 ...

  8. 【BZOJ3555】企鹅QQ,第一次正确的使用哈希A题

    Time:2016.08.17 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 夏令营时做的题,一直没发题解 比较简单的思路是枚举每一位,然后看去掉这一位后有多少相同的串 关键是怎么 ...

  9. BZOJ 3555 [CTSC2014] 企鹅QQ Hash

    Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大 ...

最新文章

  1. Java Review - 并发编程_DelayQueue原理源码剖析
  2. kafka-0.10.2.1:Producer生产时无法自动创建Topic
  3. fscanf简单使用
  4. 同事都说有SQL注入风险,我非说没有
  5. 检测到 LoaderLock Message Microsoft.DirectX.dll”正试图在 OS 加载程序锁内执行托管代码。...
  6. 朋友圈9宫格留白_九宫格招聘拼图图片
  7. iscsi:IO操作流程(四)
  8. 三角函数常用公式一篇汇
  9. bootstrap-toastr 消息通知插
  10. 微信公众平台版面设计需要服务器,谈谈微信公众号如何快速在线排版设计好看又实用的方法...
  11. 阿里云系统盘扩容及数据盘分区、格式化分区、挂载、取消挂载
  12. 笔记本电脑无法连接WiFi怎么办?
  13. UVA 10499 正义的土地
  14. 红孩儿编辑器的模块设计15
  15. 洛谷P3373 线段树2(乘法加法lazytag)
  16. 电话+电视+网络=“三位一体”?
  17. 192.168.8.1手机登陆_192.168.8.1登录入口上网设置
  18. oracle截取日期函数
  19. pyltp安装的一系列过程
  20. pass在c语言中的作用,Python语句中pass语句有什么作用?浅谈pass语句的用法

热门文章

  1. 荣耀linux怎么安装双系统,双系统怎么装?
  2. oracle tabs作用,Oracle 中 table 函数的应用浅析
  3. python几多级证书_Openssl 生成多级证书
  4. python通过下载链接下载_Python根据URL地址下载文件——wget
  5. P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)
  6. 任意进制转化 函数 模板(一)
  7. class com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text
  8. BSS段 data段 text段 堆heap 和 栈stack
  9. HTML5 中的下载简化处理
  10. 极限学习机和支持向量机_极限学习机I