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 }
View Code

 

以上是关于Panasonic Programming Contest 2020 D - String Equivalence的主要内容,如果未能解决你的问题,请参考以下文章

2020年3月14日Panasonic Programming Contest 2020

Atcoder Panasonic Programming Contest 2020 部分题解

Panasonic多方电话会议

AtCoder Beginner Contest 203(Sponsored by Panasonic)(补题)

AtCoder Beginner Contest 203(Sponsored by Panasonic)D

启动 Panasonic VIERA AR Setup Simulator 等增强现实 (AR) 应用程序