ACM模板(Java)
模板
Trie
HIHOCODER1014
static final int N = (int)1e5+10;
static final int SIGMA=(int)27;
static int ch[][]=new int[N*10][SIGMA],sz;
static int var[]=new int[N*10];
static void insert(String x){
int u=0;
for(int i=0;i<x.length();i++){
int c=x.charAt(i)-'a';
if(ch[u][c]==0){
for(int t=0;t<SIGMA;t++){
ch[sz][t]=0;
}
ch[u][c]=sz;
var[sz++]=0;
}
u=ch[u][c];
var[u]++;
}
}
static int search(String x){
int u=0;
for(int i=0;i<x.length();i++){
int c=x.charAt(i)-'a';
if(ch[u][c]!=0) u=ch[u][c];
else return 0;
}
return var[u];
}
static void clear() {
sz=1;var[0]=0;
for(int i=0;i<SIGMA;i++) {
ch[0][i]=0;
}
}
KMP
HIHOCODER 1015
写法1
static void getFail(char[] b) {
int m=b.length,j=0;
f[0]=f[1]=0;
for(int i=1;i<m;i++) {
while(j>0&&b[j]!=b[i]) j=f[j];
if(b[j]==b[i]) j++;
f[i+1]=j;
}
}
static int kmp_count(char[] a,char[] b) {
int n=a.length,m=b.length;
int j=0,res=0;
for(int i=0;i<n;i++) {
while(j>0&&b[j]!=a[i]) j=f[j];
if(b[j]==a[i]) j++;
if(j==m) {
j=0;
res++;
}
}
return res;
}
写法2
static void getFail(char[] b,int m) {
int j=0;
f[1]=0;
for(int i=2;i<=m;i++) {
while(j>0&&b[j+1]!=b[i]) j=f[j];
if(b[j+1]==b[i]) j++;
f[i]=j;
}
}
static int kmp_count(char[] a,char[] b,int n,int m) {
int j=0,res=0;
for(int i=1;i<=n;i++) {
while(j>0&&b[j+1]!=a[i]) j=f[j];
if(b[j+1]==a[i]) j++;
if(j==m) {
j=0;
res++;
}
}
return res;
}
Manacher
HIHOCODER1016
static final int N=(int)1e6+10;
static char a[]=new char[N],str[]=new char[2*N+5];
static int p[]=new int[2*N+5],len1,len2;
static void Init(){
len1=a.length;
str[0]='(';
str[1]='#';
for(int i=0;i<len1;i++){
str[i*2+2]=a[i];
str[i*2+3]='#';
}
len2=len1*2+2;
str[len2]=')';
}
static int Manacher(){
for(int i=0;i<len2;i++) p[i]=0;
int id=0,mx=0,ans=0;
for(int i=1;i<len2;i++){
if(mx>i) p[i]=Math.min(mx-i,p[2*id-i]);
else p[i]=1;
for(;str[i+p[i]]==str[i-p[i]];p[i]++);
if(p[i]+i>mx){
mx=p[i]+i;
id=i;
}
if(p[i]-1>ans) ans=p[i]-1;
}
return ans;
}
Tire图
HIHOCODER 1036
static int sz;
static final int N=1000005;
static class Node{
Node(){
post = 0;
for(int i = 0; i < 26; i++)
next[i] = 0;
end = false;
}
int post;
int next[]=new int[26];
boolean end;
};
static Node nodes[]=new Node[N];
//将str添加到trie图中
static void insert(String str){
int cur=0;
for(int i=0;i<str.length();i++){
if(nodes[cur].next[str.charAt(i)-'a'] == 0)
nodes[cur].next[str.charAt(i)-'a'] = ++sz;
cur = nodes[cur].next[str.charAt(i)-'a'];
}
nodes[cur].end = true;
}
//为trie图中的每个点添加它指向的后缀点位置
static void addPost(){
LinkedList<Integer> que = new LinkedList<Integer>();
que.push(0);
int cur;
while(!que.isEmpty()){
cur=que.pop();
for(int i=0;i<26;i++){
if(nodes[cur].next[i]!=0){
que.push(nodes[cur].next[i]);
if(cur != 0)//不是根结点,需要设置当前点的子节点的后缀=父结点的后缀经过i到达的点
nodes[nodes[cur].next[i]].post = nodes[nodes[cur].post].next[i];
}
else //nodes[current].next[i] == -1当前点经过i没有可达的
nodes[cur].next[i] = nodes[nodes[cur].post].next[i];
}
}
}
//查找str
static boolean search(String str){
int cur = 0;
for(int i=0;i<str.length();i++){
if(nodes[nodes[cur].next[str.charAt(i)-'a']].end)
return true;
cur = nodes[cur].next[str.charAt(i)-'a'];
}
return false;
}
static void Init() {
sz=0;
for(int i=0;i<=1000000;i++) {
nodes[i]=new Node();
}
}
ACM模板(Java)的更多相关文章
- ACM之Java速成(4)
ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...
- ACM之Java速成(3)
ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...
- ACM之Java速成(2)
acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...
- ACM中java的使用
ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...
- ACM之Java输入输出
本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...
- ACM中java的使用 (转)
ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...
- [工具使用]-利用latex管理创建自己的ACM模板
从很早入坑ACM开始,便和各种算法的模板打着交道,虽然kaungbin的模板已经足够强大,但是自己在平常做题中也逐渐有着自己的一些模板,也有一些kuangbin模板中没有的更快的板子,虽然不确定时候以 ...
- ACM中Java的应用
先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...
- ZOJ ACM 1204 (JAVA)
毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题.俺做题比較任意,一般先挑通过率高的题来做. 第1204题,详细描写叙述请參考,ZOJ ACM 1204 1)难度分析 这个题目,基本的难 ...
随机推荐
- 有哪些值得学习的spring boot开源项目?
1. awesome-spring-boot 首先给大家介绍的就是Spring Boot 中文索引,这是一个专门收集 Spring Boot 相关资料的开源项目,也有对应的导航页面. 产品主页 htt ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 /* 并查集(Union-Find)裸题 并查集三个函数:初始化Init,寻找根节点Find,连通Union 考察:连通边数问题 */ #include <cstdio> #i ...
- C. Jon Snow and his Favourite Number DP + 注意数值大小
http://codeforces.com/contest/768/problem/C 这题的数值大小只有1000,那么可以联想到,用数值做数组的下标,就是类似于计数排序那样子.. 这样就可以枚举k次 ...
- poj2282The Counting Problem(组合)
链接 计算0-9每一个数字出现的次数 逐位进行处理 对于每一位取几时依次算下组合的情况 注意0的情况需要特殊处理一下 因为0000 00 这样都是等于0的 前面的几位是多余的 #include < ...
- 动手实现 Redux(三):纯函数(Pure Function)简介
我们接下来会继续优化我们的 createStore 的模式,让它使我们的应用程序获得更好的性能. 但在开始之前,我们先用一节的课程来介绍一下一个函数式编程里面非常重要的概念 —— 纯函数(Pure F ...
- TFS强制删除离职人员签出锁定项的方法(转)
项目组一哥们走的时候以独占方式迁出了文件,现在其他人都无法修改,管理员似乎也无法将文件解除.经过摸索,找到了一种暴力的方法——直接改TFS数据库.虽然暴力,却能实实在在地解决这个问题. 步骤: 1 ...
- 获取当前目录 文件输出html 网页查看
@echo off setlocal set LISTFILE=list.html echo MAKING LISTFILE … (PLEASE WAIT) echo ^<!doctype ht ...
- HDU 5381 The sum of gcd (技巧,莫队算法)
题意:有一个含n个元素的序列,接下来有q个询问区间,对每个询问区间输出其 f(L,R) 值. 思路: 天真单纯地以为是道超级水题,不管多少个询问,计算量顶多就是O(n2) ,就是暴力穷举每个区间,再直 ...
- codeforces 235 B lets play osu!
cf235B 一道有意思的题.(据说是美少女(伪)计算机科学家出的,hh) 根据题目要求,就是求ni^2的和. 而n^2=n*(n-1)+n; n*(n-1)=C(n,2)*2: 所以∑ai^2=∑a ...
- python基础一 day2 数据类型
int: bool: 类型转换: str到int有条件,str必须是数字, "123e"是错误的 bool转换为int类型,需要int(x) 结果: 结果: 空字 ...