您的位置:首页 > 其它

Joke with permutation 分类: ACM 2015-08-03 14:09 1

2015-12-31 08:40 274 查看
Joke with permutation

Time Limit: 3000ms, Special Time Limit:7500ms, Memory Limit:65536KB

Total submit users: 87, Accepted users: 60

Problem 13341 : Special judge

Problem description

Joey had saved a permutation of integers from 1 to n in a text file. All the numbers were written as decimal numbers without leading spaces.

Then Joe made a practical joke on her: he removed all the spaces in the file.

Help Joey to restore the original permutation after the Joe’s joke!

Input

The input file contains a single line with a single string — the Joey’s permutation without spaces.

The Joey’s permutation had at least 1 and at most 50 numbers.

Output

Write a line to the output file with the restored permutation. Don’t forget the spaces!

If there are several possible original permutations, write any one of them.

Sample Input

4111109876532

Sample Output

4 1 11 10 9 8 7 6 5 3 2

Problem Source

NEERC 2014

题意是给出一个全排列的字符串,然后让你确定排列两个元素之间的空格位置。

先根据字符串的长度求出n是多大,然后用dfs搜索符合条件的排列。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define maxn 500
using namespace std;
int n,l,cnt;
int flag[maxn];
char str[maxn];
int hash[maxn];
bool ll;
void dfs(int k)//k表示当前处理到哪个字符
{
if(ll)
return ;
if(k>=n)
{
for(int i=0;i<n;i++)
{
printf("%c",str[i]) ;
if(flag[i]&&i!=n-1)
printf(" ");

} //当K>n时,输出排列,return
ll=1;
return ;
}
if(!hash[str[k]-'0']&&(k+1>=n||str[k+1]!='0'))//一个字有两种组合,要么自己组成一个数,要么和后面的字符组成两位数,注意组合完之后, 字符串的第一个不能是零
{
hash[str[k]-'0']=1;
flag[k]=1;
dfs(k+1);
flag[k]=0;//整数不可取,回退
hash[str[k]-'0']=0;
}
if(!hash[(str[k]-'0')*10+str[k+1]-'0']&&((str[k]-'0')*10+(str[k+1]-'0'))<=cnt&&(str[k+2]!='0'||k+2>=n))
{
hash[(str[k]-'0')*10+str[k+1]-'0']=1;
flag[k+1]=1;
dfs(k+2);
flag[k+1]=0;
hash[(str[k]-'0')*10+str[k+1]-'0']=0;
}
}
int main()
{
while(scanf("%s",str)!=EOF)
{
n=strlen(str);
if(n<=9)
{
for(int i=0;i<n-1;i++)
printf("%c ",str[i]);
printf("%c\n",str[n-1]);
continue;
}
int num=n-9;
cnt=9+num/2;
ll=0;
memset(hash,0,sizeof(hash));
memset(flag,0,sizeof(flag));
dfs(0);
printf("\n");
}
return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: