NC214948. 衔尾蛇
描述
输入描述
一行三个非负整数:、和
输出描述
一个整数,为方案的数量。
示例1
输入:
1 1 1
输出:
8
说明:
一条红蛇咬自己,一种方案。示例2
输入:
1 0 0
输出:
1
说明:
一条红蛇咬自己,显然只有这一种方案。示例3
输入:
3 0 0
输出:
3
说明:
Python3 解法, 执行用时: 704ms, 内存消耗: 8856K, 提交时间: 2022-10-09 13:04:18
mp={} ans=0 # a=b=c=0 def dfs(s): global ans global a global b global c t="" t=t+s+s flag=True for i in range(len(s)): q=t[i:i+len(s)] if mp.get(q,None):flag=False if flag==True: mp[s]=True ans+=1 if a: a-=1 dfs(s+"a") a+=1 if b: b-=1 dfs(s+"b") b+=1 if c: c-=1 dfs(s+"c") c+=1 data=list(map(int,input().strip().split())) a,b,c=data dfs("") print(ans-1)
C++(clang++11) 解法, 执行用时: 182ms, 内存消耗: 8252K, 提交时间: 2021-04-08 15:34:04
#include<bits/stdc++.h> using namespace std; unordered_map<string,bool>mp; int a,b,c,ans=0; void dfs (string s){ string t =""; t=t+s+s; bool flag=true; for(int i=0;i<s.length();++i){ string q=t.substr(i,s.length()); if(mp[q]==true) flag=false; } if(flag==true){ mp[s]=true; ans++; } if(a){ a--; dfs(s+"a"); a++; } if(b){ b--; dfs(s+"b"); b++; } if(c){ c--; dfs(s+"c"); c++; } } int main(){ cin>>a>>b>>c; dfs(""); cout<<ans-1<<"\n"; return 0; }