您的位置:首页 > 大数据 > 人工智能

POJ 3007 Organize Your Train part II

2015-01-26 09:50 218 查看


题意:

  如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数:

例如字符串abba:可以按三种比例分割;1:3;2:2;3:1

部分反转可以得到如下所有的字符串:

  



  去掉重复可以得到六个不同的字符串,输出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;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: