Organize Your Train part II-POJ3007模拟
Organize Your Train part II
| Time Limit: 1000MS | Memory Limit: 65536K |
|---|
Description
RJ Freight, a Japanese railroad company for freight operations has recently constructed exchange lines at Hazawa, Yokohama. The layout of the lines is shown in Figure 1.
Figure 1: Layout of the exchange lines
A freight train consists of 2 to 72 freight cars. There are 26 types of freight cars, which are denoted by 26 lowercase letters from “a” to “z”. The cars of the same type are indistinguishable from each other, and each car’s direction doesn’t matter either. Thus, a string of lowercase letters of length 2 to 72 is sufficient to completely express the configuration of a train.
Upon arrival at the exchange lines, a train is divided into two sub-trains at an arbitrary position (prior to entering the storage lines). Each of the sub-trains may have its direction reversed (using the reversal line). Finally, the two sub-trains are connected in either order to form the final configuration. Note that the reversal operation is optional for each of the sub-trains.
For example, if the arrival configuration is “abcd”, the train is split into two sub-trains of either 3:1, 2:2 or 1:3 cars. For each of the splitting, possible final configurations are as follows (“+” indicates final concatenation position):
[3:1]
abc+d cba+d d+abc d+cba
[2:2]
ab+cd ab+dc ba+cd ba+dc cd+ab cd+ba dc+ab dc+ba
[1:3]
a+bcd a+dcb bcd+a dcb+a
Excluding duplicates, 12 distinct configurations are possible.
Given an arrival configuration, answer the number of distinct configurations which can be constructed using the exchange lines described above.
Input
The entire input looks like the following.
the number of datasets = m
1st dataset
2nd dataset
...
m-th dataset
Each dataset represents an arriving train, and is a string of 2 to 72 lowercase letters in an input line.
Output
For each dataset, output the number of possible train configurations in a line. No other characters should appear in the output.
Sample Input
4
aa
abba
abcd
abcde
Sample Output
1
6
12
18
Source
Japan 2006 Domestic
思路:简单的模拟,不过不能用map来标记字符串,会超时,所以写一个哈希邻接表
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int Max = 99991;
typedef struct node
{
char str[80];
node *next;
node()
{
next = 0;
}
}Point;
Point *Head[Max];
int ans;
bool Hash(char *s) //哈希处理冲突
{
int len = strlen(s);
int num = 0 ;
for(int i=0;i<len;i++)
{
num = num+s[i]*(i+1);
num%=Max;
}
if(Head[num]==NULL)
{
Point *p = new Point;
strcpy(p->str,s);
Head[num]=p;
return true;
}
else
{
Point *p = Head[num];
while(p)
{
if(strcmp(p->str,s)==0)
{
return false;
}
p=p->next;
}
p=new Point;
strcpy(p->str,s);
p->next = Head[num];
Head[num] = p;
}
return true;
}
void Reverse(char *s,int len)//字符串翻转
{
for(int i = 0 ;i<len/2;i++)
{
swap(s[i],s[len-1-i]);
}
}
void Strcat(char *s1,char *s2,char *s)
{
int i=0,j;
for(j=0;s1[j]!='\0';j++)
{
s[i++]=s1[j];
}
for(j=0;s2[j]!='\0';j++)
{
s[i++]=s2[j];
}
s[i]='\0';
}
void Strstr(char *s,char *s1,char *s2,int mid,int len)//字符串合并
{
for(int i=0;i<mid;i++)
{
s1[i]=s[i];
}
s1[mid]='\0';
for(int i=mid,j=0;i<len;j++,i++)
{
s2[j]=s[i];
}
s2[len-mid]='\0';
}
void Add(char *s1,char *s2,char *s)//判断字符
{
Strcat(s1,s2,s);
if(Hash(s))
{
ans++;
}
Strcat(s2,s1,s);
if(Hash(s))
{
ans++;
}
}
int main()
{
int T;
scanf("%d",&T);
char s1[80],s2[80],s[80],str[80];
while(T--)
{
scanf("%s",str);
memset(Head,0,sizeof(Head));
ans=0;
int len=strlen(str);
for(int i=1;i<=len-1;i++)
{
Strstr(str,s1,s2,i,len);
Add(s1,s2,s);
Reverse(s1,i);
Add(s1,s2,s);
Reverse(s2,len-i);
Add(s1,s2,s);
Reverse(s1,i);
Add(s1,s2,s);
}
printf("%d\n",ans);
}
return 0;
}
Organize Your Train part II-POJ3007模拟的更多相关文章
- 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
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7561 Acce ...
- poj 3007 Organize Your Train part II(静态字典树哈希)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6700 Accepted: 1922 Description RJ Freigh ...
- poj 3007 Organize Your Train part II(二叉排序树)
题目:http://poj.org/problem?id=3007 题意:按照图示的改变字符串,问有多少种..字符串.. 思路:分几种排序的方法,,刚开始用map 超时(map效率不高啊..),后来搜 ...
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- poj Organize Your Train part II
http://poj.org/problem?id=3007 #include<cstdio> #include<algorithm> #include<cstring& ...
- Organize Your Train part II(hash)
http://poj.org/problem?id=3007 第一次用STL做的,TLE了,自己构造字符串哈希函数才可以.. TLE代码: #include <cstdio> #inclu ...
随机推荐
- Enable Cross-Origin Requests in Asp.Net WebApi 2[Reprint]
Browser security prevents a web page from making AJAX requests to another domain. This restriction i ...
- css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数
本文同时发表于本人个人网站 www.yaoxiaowen.com 距离上一篇文章已经一个月了,相比于写代码,发现写文章的确是更需要坚持的事情.言归正传,梳理一下这一个月来,在写ife任务时,有必要记录 ...
- Hadoop - Unable to load native-hadoop library for your platform
简介 运行hadoop或者spark(调用hdfs等)时,总出现这样的错误“Unable to load native-hadoop library for your platform”,其实是无法加 ...
- 申请使用aws的一些笔记
1. 申请可以使用asw.amazon.com/cn/,这个界面虽然是中文的,但是申请的是海外的aws. 2. 审核后会收到如下的一封邮件: 3. 剩下创建EC2和RDS的过程可以参考http://w ...
- JsonProperties对模型返回的应用
在采用springMvc+Mybatis的架构中.数据库已经建好,数据库和需要返回的实体共用一个model.一切都井然有序,看起来很美好. 返回的代码都如下这样 @RequestMapping(&qu ...
- Python开发【第九章】:堡垒机实例
一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作 模块安装 C:\Program Files\Python 3.5\Scri ...
- linux指定nologin用户执行命令
为了安全,使用nologin账号来运行程序, su -s /bin/bash -c "ls" www 这条命令到底做了什么呢?su -s 是指定shell,这里www用户是nolo ...
- AppScan漏洞“已解密的登陆请求”修复解决方案
最近在修复系统漏洞时,使用新版AppScan扫描IIS站点(WebForm)出现一个严重漏洞“已解密的登陆请求”. 扫描工具修复的建议为在登陆界面不使用含“password”类型的控件或加密录入参数. ...
- buildroot--uboot&kernel&rootfs全编译工具
参考: http://www.crifan.com/files/doc/docbook/buildroot_intro/release/html/buildroot_intro.html https: ...
- linux打包与压缩
打包是指将一大堆文件或目录变成一个总的文件. 压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 标注:linux文件需要先打包后才能进行压缩. tar –cvf test.tar one. ...