您的位置:首页 > 其它

SHU 2013 暑期集训(7-15)解题报告

2013-07-16 13:07 453 查看

Problem A: 【C语言训练】字符串正反连接

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 78 Solved: 41
[Submit][Status][Web Board]

Description

所给字符串正序和反序连接,形成新串并输出

Input

任意字符串(长度<=50)

Output

字符串正序和反序连接所成的新字符串

Sample Input

123abc

Sample Output

123abccba321

HINT

分析:水题,直接正向输出后反向输出。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define maxlen 1100
using namespace std ;
int maps[25][maxlen];
int n;
char c;
char str[25][maxlen];
int visited[25];
int dfs(int s)
{
int ans=0,flag=0;
for(int i=0; i<n; i++)
{
int temp=0;
if(maps[s][i]&&visited[i])
{
flag=1;
visited[i]--;
temp=dfs(i);
visited[i]++;
temp+=strlen(str[s])-maps[s][i];
}
ans=max(ans,temp);
}
if(!flag)
return strlen(str[s]);
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
scanf("%s",str[i]);
cin>>c;
memset(maps,0,sizeof(maps));
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
int len1=strlen(str[i]);
int len2=strlen(str[j]);
for(int k=0; k<len1&&k<len2; k++)
{
if(strncmp(str[i]+len1-k-1,str[j],k+1)==0)
{
maps[i][j]=k+1;
break;
}
}
}
}
for(int i=0; i<n; i++)
visited[i]=2;
int cnt=0;
for(int i=0; i<n; i++)
{
if(str[i][0]==c)
{
visited[i]--;
cnt=max(cnt,dfs(i));
}
}
printf("%d\n",cnt);
}
}


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