大疆 8.13笔试
单选 多选 判断
编程题两道:
1. 给你一个目录,查文件输出
建树,深度查找,感觉没啥问题,只过了55%
#include <bits/stdc++.h>
using namespace std;
bool res = false;
class Node{
public:
string val;
vector<Node*> nxt;
Node(string str){
val = str;
}
};
int process(string &str){
int res = 0;
for(auto &ch : str){
if(ch=='-')res++;
else break;
}
return res;
}
bool check(string &str , string &tar){
for(int i = 0 ; i<str.length() ; i++){
for(int j = 0 ; j<tar.length() ; j++){
if(str[i]!=tar[j])break;
if(j == tar.length()-1)return true;
}
}
return false;
}
void dfs(Node *root , string str , string target){
int cur = process(root->val);
string temp = root->val.substr(cur);
str += temp;
if(temp.back()=='/')temp.pop_back();
else{
int cnt = 0;
for(;cnt<temp.length() ; cnt++){
if(temp[cnt] == '.')break;
}
temp = temp.substr(0 , cnt);
}
if(root->nxt.size()==0){
if(check(temp,target)){
res = true;
cout<<str<<endl;
}
return;
}
if(check(temp , target)){
res = true;
cout<<str<<endl;
}
for(auto next : root->nxt){
dfs(next , str , target);
}
}
int main(){
// 输入
ios::sync_with_stdio(false);
cin.tie(0);
string str;
cin>>str;
int col;
cin>>col;
vector<string> vec(col);
unordered_map<string , Node*> umap;
// 建树
Node *root = new Node("/");
umap[" "] = root;
for(int i = 0 ; i<col ; i++){
cin>>vec[i];
Node *node = new Node(vec[i]);
umap[vec[i]] = node;
int cur = process(vec[i]);
if(cur==0){
umap[" "]->nxt.emplace_back(node);
continue;
}
for(int j = i - 1 ; j>=0 ; j--){
int lead = process(vec[j]);
if(lead == cur-1){
umap[vec[j]]->nxt.emplace_back(node);
break;
}
}
}
// 深度遍历
dfs(root , "" , str);
if(!res)cout<<"No Files Found";
return 0;
}
2. 给两个数组,判断能否通过第二个数组中的数替换第一个数组中的数使得第一个数组严格有序
不知道是要怎么输入,好像是通过一个字符串输入的,卡了半天最后时间到了才写了个字符串的,9%
#include <bits/stdc++.h>
using namespace std;
int main(){
// 输入
ios::sync_with_stdio(false);
cin.tie(0);
int score;
string s1 , s2;
cin>>s1>>s2;
vector<int> v1;
vector<int> v2;
int cnt = 0;
for(; cnt<s1.length() ; cnt++){
if(s1[cnt] == '[')break;
}
s1 = s1.substr(cnt+1);
s1.pop_back();
cnt = 0;
for(; cnt<s2.length() ; cnt++){
if(s2[cnt] == '[')break;
}
s2 = s2.substr(cnt+1);
s2.pop_back();
string ss = "";
int s = 0 , q = 0;
while(q<s1.length()){
if(s1[q]==','){
ss = s1.substr(s , q-s);
int cur = stoi(ss);
s = q+1;
v1.emplace_back(cur);
}
q++;
}
ss = s1.substr(s);
q = stoi(ss);
v1.emplace_back(q);
s = 0 , q = 0;
while(q<s2.length()){
if(s2[q]==','){
ss = s2.substr(s , q-s);
int cur = stoi(ss);
s = q+1;
v2.emplace_back(cur);
}
q++;
}
ss = s2.substr(s);
q = stoi(ss);
v2.emplace_back(q);
sort(v2.begin() , v2.end());
int p1 = 0 , p2 = 0;
int res = 0;
while(p1<v1.size()-1&&p2<v2.size()){
if(v1[p1]>=v1[p1+1]){
if(p1!=0){
while(p2<v2.size()&&v1[p2]<=v1[p1-1])p2++;
if(!(v2[p2]>v1[p1-1]&&v2[p2]<v1[p1+1])){
cout<<-1;
return 0;
}
v1[p1] = v2[p2++];
res++;
}
}
p1++;
}
cout<<res;
return 0;
}
太难了太难了,算法不难,难在怎么输入,第一道的建树和第二道的输入把我卡烂了
#大疆##笔试#
查看15道真题和解析