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

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

二次联通门 : 

 

 

 

 

 

/*    BZOJ 3555: [Ctsc2014]企鹅QQ    哈希        先处理出所有串的哈希值    后枚举每一位, 删去该位     排序    统计相同的个数即可 */#include 
#include
#include
void read (int &now){ register char word = getchar (); bool temp = false; for (now = 0; word < '0' || word > '9'; word = getchar ()) if (word == '-') temp = true; for (; word >= '0' && word <= '9'; now = now * 10 + word - '0', word = getchar ()); if (temp) now = -now;}#define Max 30006char line[Max / 150];unsigned long long Hash;#define L 233int Len;unsigned long long mi[L];unsigned long long Get_Hash (char *key){ Hash = 0; for (int i = 0; i < Len; i ++) Hash = Hash * L + key[i]; return Hash;}unsigned long long hash[Max * 210];int main (int argc, char *argv[]){ int N, M, K; read (N); read (M); read (K); Len = M; register int i, j; mi[0] = 1; for (int i = 1; i <= L; i ++) mi[i] = mi[i - 1] * L; int cur = 0; unsigned long long res; for (i = 1; i <= N; i ++) { scanf ("%s", line); res = Get_Hash (line); for (j = 0; j < Len; j ++) hash[++ cur] = res - mi[Len - j - 1] * line[j]; } std :: sort (hash + 1, hash + 1 + cur); long long Answer = 0; K = 1; for (i = 2; i <= cur; i ++) if (hash[i] == hash[i - 1]) K ++; else { Answer += K * (K - 1) / 2; K = 1; } Answer += K * (K - 1) / 2; printf ("%lld", Answer); return 0;}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/7299630.html

你可能感兴趣的文章
static 静态变量
查看>>
Docker 安装及问题处理
查看>>
匿名内部类
查看>>
BZOJ4071: [APIO2015]八邻旁之桥
查看>>
Redis的六种特性 场景
查看>>
mysql 添加[取消]timestamp的自动更新
查看>>
码农的半衰期只有15年?
查看>>
手工释放linux内存
查看>>
2014-5-30 总结
查看>>
【H3 BPM工作流程管理产品小故事】第四篇 子表创建
查看>>
洛谷P1148 拱猪计分
查看>>
MySQL服务器的安装和配置,MySQL Workbench 8.0.12安装,MySQL的基本使用
查看>>
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
Replace Nested Conditional with Guard Clauses(用卫语句代替嵌套循环)
查看>>
jsp中${}是EL表达式的常规表示方式
查看>>
GoldenGate常见问题及处理
查看>>
Android JNI学习(五)——Demo演示
查看>>
java map合并_java 实现合并map示例Demo1
查看>>
java 8 string_String.join() --Java8中String类新增方法
查看>>