[牛客练习] 深信服校园招聘c/c 软件开发H卷
Apare
2020.9.17
牛客链接
56种
dp或者dfs
#include <bits/stdc++.h>
using namespace std;
int r[10];
int cnt;
void dfs(int x) {
if(x==5) {
if(r[4]==6) {
++cnt;
}
return;
}
for(int i=r[x-1];i<=6;++i) {
r[x] = i;
dfs(x+1);
}
}
int main(void) {
r[0] = 1;
dfs(1);
//4,6
cout<<cnt<<endl;
return 0;
}
访问权限 <–
他的题意应该是这样的:同一个路径,如果之前指定过权限,就不再覆盖权限。如果没有指定过,就继承父节点的权限。默认根节点的权限是N
用Trie树维护即可。可以把路径处理成vector<string>
, Trie树的每个结点存储一个string 和该路径的权限。
#include <bits/stdc++.h>
using namespace std;
vector<string> Split(const string& s) {
vector<string> ans;
int len = s.length();
string tmp;
for(int i=1;i<len;++i) {
if(s[i]=='/') ans.push_back(tmp),tmp="";
else tmp += s[i];
}
if(tmp.size()) ans.push_back(tmp);
return ans;
}
struct Trie_Node{
string name; //该结点的文件名
char tag; //Y or N
unordered_map<string,Trie_Node*> child;
Trie_Node(string tmp,char ch) {
name = tmp; tag = ch;
}
};
//void dfs(Trie_Node * root,vector<Trie_Node*>& v) {
// cout<<"dfs("<<root->name<<")\n";
// if(!root)
// {
// for(auto x:v) {
// cout<<x->name<<"("<<x->tag<<") -> ";
// }
// cout<<endl;
// return;
// }