模板

Trie

HIHOCODER1014
  1. static final int N = (int)1e5+10;
  2. static final int SIGMA=(int)27;
  3. static int ch[][]=new int[N*10][SIGMA],sz;
  4. static int var[]=new int[N*10];
  5. static void insert(String x){
  6. int u=0;
  7. for(int i=0;i<x.length();i++){
  8. int c=x.charAt(i)-'a';
  9. if(ch[u][c]==0){
  10. for(int t=0;t<SIGMA;t++){
  11. ch[sz][t]=0;
  12. }
  13. ch[u][c]=sz;
  14. var[sz++]=0;
  15. }
  16. u=ch[u][c];
  17. var[u]++;
  18. }
  19. }
  20. static int search(String x){
  21. int u=0;
  22. for(int i=0;i<x.length();i++){
  23. int c=x.charAt(i)-'a';
  24. if(ch[u][c]!=0) u=ch[u][c];
  25. else return 0;
  26. }
  27. return var[u];
  28. }
  29. static void clear() {
  30. sz=1;var[0]=0;
  31. for(int i=0;i<SIGMA;i++) {
  32. ch[0][i]=0;
  33. }
  34. }

KMP

HIHOCODER 1015

写法1

  1. static void getFail(char[] b) {
  2. int m=b.length,j=0;
  3. f[0]=f[1]=0;
  4. for(int i=1;i<m;i++) {
  5. while(j>0&&b[j]!=b[i]) j=f[j];
  6. if(b[j]==b[i]) j++;
  7. f[i+1]=j;
  8. }
  9. }
  10. static int kmp_count(char[] a,char[] b) {
  11. int n=a.length,m=b.length;
  12. int j=0,res=0;
  13. for(int i=0;i<n;i++) {
  14. while(j>0&&b[j]!=a[i]) j=f[j];
  15. if(b[j]==a[i]) j++;
  16. if(j==m) {
  17. j=0;
  18. res++;
  19. }
  20. }
  21. return res;
  22. }

写法2

  1. static void getFail(char[] b,int m) {
  2. int j=0;
  3. f[1]=0;
  4. for(int i=2;i<=m;i++) {
  5. while(j>0&&b[j+1]!=b[i]) j=f[j];
  6. if(b[j+1]==b[i]) j++;
  7. f[i]=j;
  8. }
  9. }
  10. static int kmp_count(char[] a,char[] b,int n,int m) {
  11. int j=0,res=0;
  12. for(int i=1;i<=n;i++) {
  13. while(j>0&&b[j+1]!=a[i]) j=f[j];
  14. if(b[j+1]==a[i]) j++;
  15. if(j==m) {
  16. j=0;
  17. res++;
  18. }
  19. }
  20. return res;
  21. }

Manacher

HIHOCODER1016
  1. static final int N=(int)1e6+10;
  2. static char a[]=new char[N],str[]=new char[2*N+5];
  3. static int p[]=new int[2*N+5],len1,len2;
  4. static void Init(){
  5. len1=a.length;
  6. str[0]='(';
  7. str[1]='#';
  8. for(int i=0;i<len1;i++){
  9. str[i*2+2]=a[i];
  10. str[i*2+3]='#';
  11. }
  12. len2=len1*2+2;
  13. str[len2]=')';
  14. }
  15. static int Manacher(){
  16. for(int i=0;i<len2;i++) p[i]=0;
  17. int id=0,mx=0,ans=0;
  18. for(int i=1;i<len2;i++){
  19. if(mx>i) p[i]=Math.min(mx-i,p[2*id-i]);
  20. else p[i]=1;
  21. for(;str[i+p[i]]==str[i-p[i]];p[i]++);
  22. if(p[i]+i>mx){
  23. mx=p[i]+i;
  24. id=i;
  25. }
  26. if(p[i]-1>ans) ans=p[i]-1;
  27. }
  28. return ans;
  29. }

Tire图

HIHOCODER 1036
  1. static int sz;
  2. static final int N=1000005;
  3. static class Node{
  4. Node(){
  5. post = 0;
  6. for(int i = 0; i < 26; i++)
  7. next[i] = 0;
  8. end = false;
  9. }
  10. int post;
  11. int next[]=new int[26];
  12. boolean end;
  13. };
  14. static Node nodes[]=new Node[N];
  15. //将str添加到trie图中
  16. static void insert(String str){
  17. int cur=0;
  18. for(int i=0;i<str.length();i++){
  19. if(nodes[cur].next[str.charAt(i)-'a'] == 0)
  20. nodes[cur].next[str.charAt(i)-'a'] = ++sz;
  21. cur = nodes[cur].next[str.charAt(i)-'a'];
  22. }
  23. nodes[cur].end = true;
  24. }
  25. //为trie图中的每个点添加它指向的后缀点位置
  26. static void addPost(){
  27. LinkedList<Integer> que = new LinkedList<Integer>();
  28. que.push(0);
  29. int cur;
  30. while(!que.isEmpty()){
  31. cur=que.pop();
  32. for(int i=0;i<26;i++){
  33. if(nodes[cur].next[i]!=0){
  34. que.push(nodes[cur].next[i]);
  35. if(cur != 0)//不是根结点,需要设置当前点的子节点的后缀=父结点的后缀经过i到达的点
  36. nodes[nodes[cur].next[i]].post = nodes[nodes[cur].post].next[i];
  37. }
  38. else //nodes[current].next[i] == -1当前点经过i没有可达的
  39. nodes[cur].next[i] = nodes[nodes[cur].post].next[i];
  40. }
  41. }
  42. }
  43. //查找str
  44. static boolean search(String str){
  45. int cur = 0;
  46. for(int i=0;i<str.length();i++){
  47. if(nodes[nodes[cur].next[str.charAt(i)-'a']].end)
  48. return true;
  49. cur = nodes[cur].next[str.charAt(i)-'a'];
  50. }
  51. return false;
  52. }
  53. static void Init() {
  54. sz=0;
  55. for(int i=0;i<=1000000;i++) {
  56. nodes[i]=new Node();
  57. }
  58. }

ACM模板(Java)的更多相关文章

  1. ACM之Java速成(4)

    ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...

  2. ACM之Java速成(3)

    ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...

  3. ACM之Java速成(2)

    acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...

  4. ACM中java的使用

    ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...

  5. ACM之Java输入输出

    本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...

  6. ACM中java的使用 (转)

    ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...

  7. [工具使用]-利用latex管理创建自己的ACM模板

    从很早入坑ACM开始,便和各种算法的模板打着交道,虽然kaungbin的模板已经足够强大,但是自己在平常做题中也逐渐有着自己的一些模板,也有一些kuangbin模板中没有的更快的板子,虽然不确定时候以 ...

  8. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  9. ZOJ ACM 1204 (JAVA)

    毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题.俺做题比較任意,一般先挑通过率高的题来做. 第1204题,详细描写叙述请參考,ZOJ ACM 1204 1)难度分析 这个题目,基本的难 ...

随机推荐

  1. PHP函数技巧篇

    可变参数 Php提供3个函数用于检索在函数中所传递的参数. $array = func_get_args(); //返回一个提供给函数的所有参数的数组 $count = func_num_args() ...

  2. 【模板】RMQ问题的ST表实现

    $RMQ$问题:给定一个长度为$N$的区间,$M$个询问,每次询问$[L_i,R_i]$这段区间元素的最大值/最小值. $RMQ$的高级写法一般有两种,即为线段树和$ST$表. 本文主要讲解一下$ST ...

  3. AtCoder Grand Contest 017 B

    B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stateme ...

  4. Alt+数字 输入特殊字符

    前言: 按住Alt键不放,再按(小键盘的)数字键,然后放开就可以输入特殊字符. 起始 终止  字符类别 0 255 基本与ASCII 码表对应        42657  42680  大写希腊字母 ...

  5. Map集合的实现类

    Map的继承关系: Map接口的常用实现类: 1.HashMap.Hashtable(t是小写) HashMap不是线程安全的,key.value的值都可以是null. Hashtable是线程安全的 ...

  6. [ POI 2017 ] Sabota?

    Description 题目链接 Solution 因为一个节点染黑了子树就都被染黑了,所以最后染黑的点集必然是一棵子树. 可以得出的结论是,如果被染黑的节点在节点 \(a\) 的子树中,而 \(a\ ...

  7. Entity Framework + MySQL 使用笔记

    添加: using (var edm = new NorthwindEntities()) { Customers c = ", Region = "天府广场", Con ...

  8. Qt窗口-仅显示关闭按钮

    环境: Qt5.3.1, mac os x 10.10.1 setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowH ...

  9. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  10. 导入Excel表格(二)

    1. 提取session中的数据.并进行分页操作,上传excel表格,保存到临时表格. 初始化临时表格,提交表单,判断状态是否为真,若为真,则启用 导入到数据库 的按钮:为false,让查询的url ...