D - String Equivalence

Panasonic Programming Contest 2020 D - String Equivalence

題意

本來是求字母的序列轉化爲求數字的序列,最後可以再轉化爲字母。
轉化爲求一個序列,如果這個位置是 p[i],那麼 1~i-1 內一定出現過所有 1~p[i]-1 的數字,且第i個位置能取的最大數字爲之前所用到的最大數字+1。

思路

序列要想到DFS
字母序列可以轉化爲數字序列 最後輸出的時候再轉換回來即可

代碼

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF  = 0x3f3f3f3f;
const ll  mod  = 1e9 + 7;
const ll  maxn = 1e6 + 5;

int n,a[100];

void dfs(int p,int lim){
	if(p==n+1){
		for(int i=1;i<=n;i++){
			cout<<char(a[i]+'a'-1);
		}
		cout<<endl;
		return;
	}
	for(int i=1;i<=lim;i++){
		a[p]=i;
		dfs(p+1,lim+(i==lim));
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	dfs(1,1);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章