Panasonic Programming Contest 2020 D - String Equivalence
Posted winfor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Panasonic Programming Contest 2020 D - String Equivalence相关的知识,希望对你有一定的参考价值。
题目链接:https://atcoder.jp/contests/panasonic2020/tasks/panasonic2020_d
题意:给定n 输出所有长度为n的 要求字符串, 要求的字符串是满足 所有 s[i]=s[j]时t[i]=t[j] 或者 s[i]!=s[j]时 t[i]!=t[j]时的最小的那个字符串
思路:这种直接for 不出来的 不是递归搜 就是状压枚举 这里的是 dfs 搜索 用string 来记录上一个是什么
刚开始第一个只能是a 有了a就可以有下一个b 以此类推 当 前面已经出现过这个字符时,后面一定可以使用
复杂度一定小于 n的阶乘 因为是这其中的子集
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define ull unsigned long long 5 #define pb push_back 6 const int maxn=2e5+10; 7 const int mod=998244353; 8 9 int n; 10 int f[15]; 11 12 void dfs(int cnt,string s) 13 { 14 if(cnt>n) 15 { 16 cout<<s<<‘ ‘; 17 return; 18 } 19 for(int i=1;i<=cnt;i++) 20 { 21 string ss=s; 22 if(f[i]==0) 23 continue; 24 ss+=char(‘a‘+i-1); 25 f[i+1]++; 26 dfs(cnt+1,ss); 27 f[i+1]--; 28 } 29 } 30 31 int main() 32 { 33 ios::sync_with_stdio(false); 34 cin.tie(0); 35 cin>>n; 36 string a; 37 f[1]=1; 38 dfs(1,a); 39 40 41 42 43 44 45 46 47 48 49 50 }
以上是关于Panasonic Programming Contest 2020 D - String Equivalence的主要内容,如果未能解决你的问题,请参考以下文章
2020年3月14日Panasonic Programming Contest 2020
Atcoder Panasonic Programming Contest 2020 部分题解
AtCoder Beginner Contest 203(Sponsored by Panasonic)(补题)