博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3555[Ctsc2014]企鹅QQ
阅读量:5774 次
发布时间:2019-06-18

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

题意:

判定有多少对字符串只有一个字母不同。字符串个数≤30000,长度≤300。

题解:

求出第i个字符串前j个字符的哈希值hs[i][j],然后枚举去掉所有字符串的第几位,将去掉后的字符串的哈希值用hs数组直接算出,排序后检查有没有相同的计入答案。

代码:

1 #include 
2 #include
3 #include
4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 #define maxn 30010 6 #define hash 2333 7 #define ll unsigned long long 8 using namespace std; 9 10 ll hs[maxn][210],tmp[maxn],power[maxn],ans; int n,k,s; char str[210];11 int main(){12 scanf("%d%d%d",&n,&k,&s); power[0]=1; inc(i,1,k)power[i]=power[i-1]*hash;13 inc(i,1,n){14 scanf("%s",str+1); inc(j,1,k)hs[i][j]=hs[i][j-1]*hash+str[j];15 }16 inc(i,1,k){17 inc(j,1,n)tmp[j]=hs[j][k]-hs[j][i]*power[k-i]+hs[j][i-1]*power[k-i+1];18 sort(tmp+1,tmp+1+n); int cnt=1;19 inc(j,2,n)if(tmp[j]==tmp[j-1])ans+=cnt,cnt++;else cnt=1;20 }21 printf("%llu",ans); return 0;22 }

 

20160820

转载于:https://www.cnblogs.com/YuanZiming/p/5792668.html

你可能感兴趣的文章
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
软件开发学习的5大技巧,你知道吗?
查看>>
java入门第二季--封装--什么是java中的封装
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>
机器学习实战_一个完整的程序(一)
查看>>
Web框架的常用架构模式(JavaScript语言)
查看>>
如何用UPA优化性能?先读懂这份报告!
查看>>
这些Java面试题必须会-----鲁迅
查看>>