记得return 0
输入输出
关闭同步流肯定会记得
但是要记得define endl '\n'
更重要
dfs和string传参的注意
题目链接
#include<bits/stdc++.h>
using namespace std;//#define int long long
using ll = long long;
using ar2 = array<int,2>;
using ar3 = array<int,3>;
using pii = pair<int,int>;
#define fi first
#define se second
#define endl '\n'
const int N=20,MOD=1e9+7;
int n,m;
unordered_set<string>st;
string s[N];
bool vis[N];bool check(string str){int x=str.size();return x>=3&&x<=16;
}void dfs(int cnt,string now){if(cnt==n){if(now.size()>=3&&now.size()<=16&&st.count(now)==0){cout<<now<<endl;exit(0);}return;}for(int i=1;i<=n;i++){if(vis[i]) continue;vis[i]=1;string und="_";while(now.size()+und.size()+s[i].size()>=3&&now.size()+und.size()+s[i].size()<=16){dfs(cnt+1,now+und+s[i]);und+='_';}vis[i]=0;}
}void solve(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>s[i];}for(int i=0;i<m;i++){string t;cin>>t;st.insert(t);}for(int i=1;i<=n;i++){vis[i]=1;dfs(1,s[i]);vis[i]=0;}cout<<-1<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T=1;
// cin>>T;while(T--) solve();return 0;}
重点不在题目逻辑
看check函数
bool check(string str){int x=str.size();return x>=3&&x<=16;
}
不能写bool check(string &str)
因为dfs
调用时 while(check(now+und+s[i])
传入check
的string
并不是一个变量 是一个临时的string
没法引用
所以这样的函数不要用 传参会拷贝一份 效率变慢 会tle
几个样例 只能麻烦一点每次都手写一个判断了