0分求助
查看原帖
0分求助
393601
墨石楼主2021/10/21 13:51
#include <cstdio>
#include <iostream>
#include <cstring>

using std::string;

const int N = 35;

int n;
int s, t, w;
string x;
int b[N], vi[N];
char tc;
bool fr;
int tmp;

void dfs(int now)
{
//	printf("\n%d: ", now);
	
	if (now == w + 1 && tmp <= 5)
	{
		if (tmp)
		{
			for (int i = 1; i <= w; i++)
			{
				printf("%c", x[b[i] - 1]);
			}
			printf("\n");
		}
		
		fr = 1;
		tmp++;
		
		return ;
	}
	
	if (!fr)
	{
		scanf("%c", &tc);
	}
		
//	b[now] = tc - ('a' + s - 1) + 1;
//	vi[b[now]] = 1;
//	
//	printf("%d\n", b[now]);
//	
//	dfs(now + 1);
//	
//	vi[b[now]] = 0;
	
	bool fl = !fr ? 0 : 1;
	for (int i = b[now - 1] + 1; i <= n; i++)
	{
		if (fl && !vi[i])
		{
			b[now] = i;
			vi[i] = 1;
			
//			printf("al %d %d\n", now, b[now]);
			
			dfs(now + 1);
			
			vi[i] = 0;
		}
		if (!fl && i == tc - ('a' + s - 1) + 1)
		{
			b[now] = i;
			vi[i] = 1;
			
//			printf("sp %d %d\n", now, b[now]);
			
			dfs(now + 1);
			
			vi[i] = 0;
			fl = 1;
		}
	}
}

int main()
{
	//freopen("count.in", "r", stdin);
	//freopen("count.out", "w", stdout);
	
	scanf("%d%d%d", &s, &t, &w);
	for (int i = s; i <= t; i++)
	{
		x += ('a' + i - 1);
	}
	n = t - s + 1;
	
	scanf("%c", &tc);
//	for (int i = 1; i <= w; i++)
//	{
//		scanf("%c", &t);
//		
//		b[i] = t - ('a' + s - 1) + 1;
//		vi[b[i]] = 1;
//	}
	
	dfs(1);
	
	//fclose(stdin);
	//fclose(stdout);
	
	return 0;
}

下载下来的样例都是过的

2021/10/21 13:51
加载中...