POJ 3007 Organize Your Train part II
2015-01-26 09:50
218 查看
![](http://poj.org/images/3007_1.gif)
题意:
如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数:
例如字符串abba:可以按三种比例分割;1:3;2:2;3:1
部分反转可以得到如下所有的字符串:
![](file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/1018907488/QQ/WinTemp/RichOle/VI%7D5PV1TSP)79Q10XTF$S]F.jpg)
去掉重复可以得到六个不同的字符串,输出6;
解题思路:
此题用反转函数reverse比较方便,然后就和模拟差不多,要列出所有情况,把不同的字符串保存在一个字符数组中,每次得到一个字符串都和该字符数字中的每一个比较,如果都不相同,把它存入字符数组;、
直接看代码吧:
//Organize Your Train part II #include<stdio.h> #include<string> #include<string.h> #include<algorithm> using namespace std; int t; char s1[201],s2[201]; char map[1000][201]; int ans;//全局变量,记录字符串的个数 void check(char s[])//检测是否有新的字符串 { for(int i=0;i<ans;i++) { if(strcmp(s,map[i])==0) return; } strcpy(map[ans++],s); return; } int main() { scanf("%d",&t); int n; while(t--) { ans=0; scanf("%s",s1); n=strlen(s1); for(int i=0;i<n-1;i++) { strcpy(s2,s1); check(s2); reverse(s2,s2+i+1); check(s2); reverse(s2+i+1,s2+n); check(s2); reverse(s2,s2+i+1); check(s2); reverse(s2,s2+n); check(s2); reverse(s2,s2+n-i-1); check(s2); reverse(s2+n-i-1,s2+n); check(s2); reverse(s2,s2+n-i-1); check(s2); } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 3007 Organize Your Train part II
- poj 3007 Organize Your Train part II
- poj 3007 Organize Your Train part II 哈希判重
- POJ-3007 Organize Your Train part II (字符串hash)
- poj 3007 Organize Your Train part II(二叉排序树)
- poj 3007 Organize Your Train part II (字符串哈希)
- poj 3007 Organize Your Train part II
- POJ 3007 Organize Your Train part II
- POJ 3007:Organize Your Train part II
- Organize Your Train part II【POJ--3007】【平衡二叉树】
- POJ 3007 Organize Your Train part II
- POJ 3007:Organize Your Train part II
- 菜鸟学算法之 POJ 3007 Organize Your Train part II
- poj 3007 Organize Your Train part II(字符串哈希)
- POJ 3007 Organize Your Train part II(枚举)
- POJ 3007 Organize Your Train part II map+string
- POJ 3007 Organize Your Train part II(Trie树)
- POJ 3007 Organize Your Train part II
- poj-3007-Organize Your Train part II
- Organize Your Train part II POJ 3007 (哈希&链式解决冲突)