Organize Your Train part II(hash)
http://poj.org/problem?id=3007
第一次用STL做的,TLE了,自己构造字符串哈希函数才可以。。
TLE代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int cnt = ,j;
char ss[];
string str,s,s1,s2;
map<string,int>v;
cin>>str;
s = str;
int len = str.size(); for (int i = ; i < len; i++)
{
s = str;
string::iterator it = s.begin();
for (j = ; j < i; j++)
ss[j] = str[j];
ss[j] = '\0';
s1 = ss;
s.erase(it,it+i);
s2 = s;
for (int k = ; k <= ; k++)
{
if (v[s1+s2]==)
{
v[s1+s2]++;
cnt++;
}
if (v[s2+s1]==)
{
v[s2+s1]++;
cnt++;
}
if (k==)
reverse(s1.begin(),s1.end());
else if (k==)
reverse(s2.begin(),s2.end());
else if (k==)
reverse(s1.begin(),s1.end());
}
}
printf("%d\n",cnt);
}
return ;
}
AC代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=;
const int MOD=;
int cnt = ; struct node
{
char s[];
struct node *next;
}*hash[N]; void Hash(char *s1,char *s2)
{
char ss[],*str;
strcpy(ss,s1);
strcat(ss,s2);
str = ss;
unsigned int key = ;
while(*str)
{
key = key*+(*str++);
}
key%=;
if (!hash[key])
{
hash[key] = new node;
strcpy(hash[key]->s,ss);
hash[key]->next = NULL;
cnt++;
}
else
{
struct node *p = hash[key];
if(strcmp(p->s,ss)==)
return ;
while(p->next)
{
if (!strcmp(p->next->s,ss))
return ;
p = p->next;
}
p->next = new node;
strcpy(p->next->s,ss);
p->next->next = NULL;
cnt++;
}
}
int main()
{ char s[],s1[],s2[],s3[],s4[];
int n,j;
scanf("%d",&n);
while(n--)
{
cnt = ;
scanf("%s",s);
int len = strlen(s);
memset(hash,,sizeof(hash));
for (int i = ; i < len; i++)
{
for (j = ; j < i; j++)
s1[j] = s[j];
s1[j] = '\0';
for (j = i; j < len; j++)
s2[j-i] = s[j];
s2[j-i] = '\0';
strcpy(s3,s1);
strcpy(s4,s2);
reverse(s1,s1+i);
reverse(s2,s2+len-i);
Hash(s3,s4);
Hash(s4,s3);
Hash(s1,s4);
Hash(s4,s1);
Hash(s2,s3);
Hash(s3,s2);
Hash(s1,s2);
Hash(s2,s1); }
printf("%d\n",cnt);
}
return ;
}
有关字符串哈希函数的经典算法
unsigned int SDBMHash(char *str)
{
unsigned int hash = ; while (*str)
{
// equivalent to: hash = 65599*hash + (*str++);
hash = (*str++) + (hash << ) + (hash << ) - hash;
} return (hash & 0x7FFFFFFF);
} // RS Hash Function
unsigned int RSHash(char *str)
{
unsigned int b = ;
unsigned int a = ;
unsigned int hash = ; while (*str)
{
hash = hash * a + (*str++);
a *= b;
} return (hash & 0x7FFFFFFF);
} // JS Hash Function
unsigned int JSHash(char *str)
{
unsigned int hash = ; while (*str)
{
hash ^= ((hash << ) + (*str++) + (hash >> ));
} return (hash & 0x7FFFFFFF);
} // P. J. Weinberger Hash Function
unsigned int PJWHash(char *str)
{
unsigned int BitsInUnignedInt = (unsigned int)(sizeof(unsigned int) * );
unsigned int ThreeQuarters = (unsigned int)((BitsInUnignedInt * ) / );
unsigned int OneEighth = (unsigned int)(BitsInUnignedInt / );
unsigned int HighBits = (unsigned int)(0xFFFFFFFF) << (BitsInUnignedInt - OneEighth);
unsigned int hash = ;
unsigned int test = ; while (*str)
{
hash = (hash << OneEighth) + (*str++);
if ((test = hash & HighBits) != )
{
hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits));
}
} return (hash & 0x7FFFFFFF);
} // ELF Hash Function
unsigned int ELFHash(char *str)
{
unsigned int hash = ;
unsigned int x = ; while (*str)
{
hash = (hash << ) + (*str++);
if ((x = hash & 0xF0000000L) != )
{
hash ^= (x >> );
hash &= ~x;
}
} return (hash & 0x7FFFFFFF);
} // BKDR Hash Function
unsigned int BKDRHash(char *str)
{
unsigned int seed = ; // 31 131 1313 13131 131313 etc..
unsigned int hash = ; while (*str)
{
hash = hash * seed + (*str++);
} return (hash & 0x7FFFFFFF);
} // DJB Hash Function
unsigned int DJBHash(char *str)
{
unsigned int hash = ; while (*str)
{
hash += (hash << ) + (*str++);
} return (hash & 0x7FFFFFFF);
} // AP Hash Function
unsigned int APHash(char *str)
{
unsigned int hash = ;
int i; for (i=; *str; i++)
{
if ((i & ) == )
{
hash ^= ((hash << ) ^ (*str++) ^ (hash >> ));
}
else
{
hash ^= (~((hash << ) ^ (*str++) ^ (hash >> )));
}
} return (hash & 0x7FFFFFFF);
}
Organize Your Train part II(hash)的更多相关文章
- POJ 3007:Organize Your Train part II
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7561 Acce ...
- POJ 3007 Organize Your Train part II
题意: 如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数: 例如字符串abba:可以按三种比例分割:1:3:2:2:3:1 部分反转可以得到如下所有的字符串: 去掉重复可以得到六个不同的 ...
- POJ 3007 Organize Your Train part II (字典树 静态)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6478 Acce ...
- Organize Your Train part II 字典树(此题专卡STL)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8787 Acce ...
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- poj 3007 Organize Your Train part II(静态字典树哈希)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6700 Accepted: 1922 Description RJ Freigh ...
- poj Organize Your Train part II
http://poj.org/problem?id=3007 #include<cstdio> #include<algorithm> #include<cstring& ...
- poj 3007 Organize Your Train part II(二叉排序树)
题目:http://poj.org/problem?id=3007 题意:按照图示的改变字符串,问有多少种..字符串.. 思路:分几种排序的方法,,刚开始用map 超时(map效率不高啊..),后来搜 ...
- Organize Your Train part II-POJ3007模拟
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...
随机推荐
- unable to get system library for the project
当向eclipse导入项目实例后,项目上出现红叉的错误提示,在项目属性里的Java Build Path里发现了错误提示复选选项: unable to get system library for t ...
- C# null
var t0est = Convert.ToString(""+null);//结果"" var t1est = ("" + null).T ...
- CorelDRAW快速制作抖音幻影图像效果
本教程讲解非常受欢迎的幻影图像效果(Anaglyph 3d),也叫图像分色立体效果,这其中我们要用到CorelDRAW中的透明度工具. 在开始实施Anaglyph效应之前,应当知道,Anaglyph ...
- Git学习总结(标签管理)
在Git中打标签非常简单,首先,切换到需要打标签的分支上: 然后,敲命令git tag <name>就可以打一个新标签: $ git tag v1. 可以用命令git tag查看所有标签: ...
- 【转载】Linux 通过mount -o loop 配置本地.iso镜像为yum源(yum仓库)
原文地址:https://www.jb51.net/os/RedHat/2682_all.html 如果拷贝到本地,可以使用mount mount fileName mountPoint -o loo ...
- jquery 对 table 的操作
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- Linux - nginx基础及常用操作
目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...
- python json结构
=====================================================json==============================import reques ...
- lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Java基础学习总结(24)——Java单元测试之JUnit4详解
Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before ...