//09/05/23 19:56 #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define str string typedef long long ll; typedef unsigned long long ull; typedef __int128 it; const int Maxn=200000+10; //快读模板 inline int read() { int ans=0,sign=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch==' '){ sign=-1; } ch=getchar(); } while(ch>='0'&&ch<='9'){ ans=ans*10+ch-'0'; ch=getchar(); } return ans*sign; } inline bool Prime(int n){ if(n<2) return false; for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return false; } return true; } str s[110]; int n; set<str> se; int res=0; int ans=-1; inline void dfs(str k) { res++; se.insert(k); if((int)se.size()!=res){ // for(auto k:se) cout<<k<<"->1"; // cout<<"\n"; ans=max(ans,res-1); // cout<<ans<<"\n"; return ; } bool check=false; for(int i=0;i<n-1;i++){ if(k[1]==s[i][0]){ dfs(s[i]); check=true; } } if(!check){ ans=max(ans,res); // for(auto k:se) cout<<k<<"->2"; // cout<<"\n"; // cout<<ans<<"\n"; return ; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; str st; cin>>st; for(int i=0;i<n-1;i++){ str t; cin>>t; s[i]=t; } dfs(st); cout<<ans; return 0; }c++代码
时间: 2023-06-15 14:04:34 浏览: 441
vc2019中 源文件<bits/stdc++.h>无法打开
这段代码实现的是一个字符串游戏,给定一个初始字符串和一些字符串,每次可以选取一个以当前字符串结尾的字符串作为下一个字符串,要求最后得到的字符串长度最长。这里使用深度优先搜索实现,每次搜索时保存已经使用过的字符串,如果新加入的字符串已经在集合中出现过,说明已经出现了环路,此时更新答案并返回。如果没有出现过,则依次搜索以该字符串结尾的字符串。最终输出答案。
此外,代码中使用了快读模板和一些常用的宏定义,具体可以参考代码注释。
阅读全文