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模拟的更多相关文章

  1. POJ 3007 Organize Your Train part II

    题意: 如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数: 例如字符串abba:可以按三种比例分割:1:3:2:2:3:1 部分反转可以得到如下所有的字符串: 去掉重复可以得到六个不同的 ...

  2. POJ 3007 Organize Your Train part II (字典树 静态)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6478   Acce ...

  3. Organize Your Train part II 字典树(此题专卡STL)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8787   Acce ...

  4. POJ 3007:Organize Your Train part II

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7561   Acce ...

  5. poj 3007 Organize Your Train part II(静态字典树哈希)

    Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6700 Accepted: 1922 Description RJ Freigh ...

  6. poj 3007 Organize Your Train part II(二叉排序树)

    题目:http://poj.org/problem?id=3007 题意:按照图示的改变字符串,问有多少种..字符串.. 思路:分几种排序的方法,,刚开始用map 超时(map效率不高啊..),后来搜 ...

  7. POJ 3007 Organize Your Train part II(哈希链地址法)

    http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...

  8. poj Organize Your Train part II

    http://poj.org/problem?id=3007 #include<cstdio> #include<algorithm> #include<cstring& ...

  9. Organize Your Train part II(hash)

    http://poj.org/problem?id=3007 第一次用STL做的,TLE了,自己构造字符串哈希函数才可以.. TLE代码: #include <cstdio> #inclu ...

随机推荐

  1. java、Android SDK、adb环境变量配置,以及JDK1.7换JDK1.8

    最近因项目需要使用将JDK1.7换成JDK1.8,故重新清晰地记录各种环境变量的配置: 这里更改的均是系统变量,不是用户变量 java环境变量配置: 变量名               变量值JAVA ...

  2. 移动到web整理

    meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  3. 移动端的传统click事件延迟和点透现象

    一.场景描述: 1.A/B两个层上下z轴重叠. 2.上层的A点击后消失或移开.(这一点很重要) 3.B元素本身有默认click事件(如a标签) 或 B绑定了click事件. 在以上情况下,点击A/B重 ...

  4. Python之路【第十九章】:Django 数据库对象关系映射

    Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...

  5. shell中{}的妙用

    shell中${}的妙用   1. 截断功能 ${file#*/}:       拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:    拿 ...

  6. 可爱的Python_课后习题_CDay−5 Python 初体验和原始需求

    计算今年是否是闰年.判断闰年条件,满足年份模400 为0,或者模4 为0 但模100不为0. def is_learp_year(year): """判断年份是否为润年& ...

  7. Global Mapper Lidar点云分类

    Global Mapper Lidar Module还挺厉害的,自动分类的效果很不错. 首先去除地面点,用的是形态学滤波方法. 之后可以分类出建筑物.低中高树木.电力线路. https://www.b ...

  8. varnish4.0 流程图以及说明

    varnish 中的内置变量 req repos client server bereq beresp bereq bereq.http.HEADER 由varnish发往backend server ...

  9. size_t 类型

    1 关于size_t定义 size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小.在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件 ...

  10. 在IE下,如果在readonly的input里面键入backspace键,会触发history.back()

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jQuery代码修正之 $("input[readOnly]" ...