【题解】P4503 [CTSC2014]企鹅QQ(哈希)

考虑这样一种做法,将每个字符串的删去某个字符的新字符串的哈希值存下来,然后最后\(sort\)一遍双指针统计每个值相同的数的个数\(x\),这个\(x\)对答案的贡献是\({x \choose 2}\)

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxs=2e2+5;
int n,len,S,cnt;
char c[maxs];
int ha1[maxs],ha2[maxs];
int s1[maxs],s2[maxs];
int base1[maxs],base2[maxs];
const int mod1=998244353,mod2=993244853;
const int seed1=233,seed2=666;
pair<int,int> data[200*30001]; inline void insert(const char*c){
for(int t=1;t<=len;++t) ha1[t]=(1ll*ha1[t-1]*seed1+c[t])%mod1,ha2[t]=(1ll*ha2[t-1]*seed2+c[t])%mod2;
for(int t=len;t;--t) s1[t]=(1ll*s1[t+1]*seed1+c[t])%mod1,s2[t]=(1ll*s2[t+1]*seed2+c[t])%mod2;
for(int t=1;t<=len;++t) data[++cnt]={(0ll+ha1[t-1]+1ll*base1[t]*s1[t+1]%mod1)%mod1,(0ll+ha2[t-1]+1ll*base2[t]*s2[t+1]%mod2)%mod2};
} int main(){
base1[0]=base2[0]=1;
n=qr(); len=qr(); S=qr();
for(int t=1;t<=len;++t) base1[t]=1ll*base1[t-1]*seed1%mod1,base2[t]=1ll*base2[t-1]*seed2%mod2;
for(int t=1;t<=n;++t) scanf("%s",c+1),insert(c);//cout<<(c+1)<<endl;
sort(data+1,data+cnt+1);
ll ans=0;
for(int t=1,r=1;t<=cnt;t=++r){
while(data[t]==data[r+1]) ++r;
if(r>t) ans=ans+((r-t+1LL)*(r-t)>>1);
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. 【IOS笔记】Event Delivery: The Responder Chain
  2. 控制台应用程序中Main函数的args参数
  3. 关于Struts2的客户端校验的FreeMarker template error!
  4. override和new的区别【摘】
  5. SVN的使用(转发)
  6. php遍历数据库
  7. 腾讯云部署Flask应用
  8. ThinkPHP的连贯操作方法中field方法
  9. iOS推送跳转AppDelegate跳转VC
  10. ngrok完成内网映射外网
  11. ImageMagick 使用经验
  12. Java Scanner 类
  13. JavaBean初识
  14. 【php增删改查实例】第二十六节 - 个人详情页制作
  15. Python中map函数
  16. CSS 页面布局、后台管理示例
  17. Go Code Review Comments 译文(截止2018年7月27日)
  18. python 协程库gevent学习--gevent源码学习(二)
  19. Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化
  20. TCPdump指定时间或者指定大小进行循环抓取报文

热门文章

  1. CNN如何识别一幅图像中的物体
  2. Python--day72--json内容回顾
  3. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法
  4. H3C NAT Server配置举例
  5. ThinkPHP 模版中的内置标签
  6. python基础九之函数
  7. js基础——正则表达式
  8. mysql导出csv/sql/newTable/txt的方法,mysql的导入txt/sql方法...mysql备份恢复mysqlhotcopy、二进制日志binlog、直接备份文件、备份策略、灾难恢复.....................................................
  9. Python中&amp;、^与and、or
  10. apply call 用法