8.15 携程笔试
1.输出有毒...
#include <iostream> #include <vector> #include <numeric> #include <limits> #include <bits/stdc++.h> using namespace std; /*请完成下面这个函数,实现题目要求的功能 当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ ******************************开始写代码******************************/ vector<int> divingBoard(int a, int b, int k) { int p = a; int q = b; a = min(p, q); b = max(p, q); if(k == 0) return {}; if(a == b) return {a*k}; vector<int> ans(k+1, 0); int t = a * k; ans[0] = t; for(int i = 1 ; i <= k ; i++){ t -= a; t += b; ans[i] = t; } //ans.erase(unique(ans.begin(), ans.end()), ans.end()); return ans; } /******************************结束写代码******************************/ int main() { vector < int > res; int a,b,k; cin >> a >> b >> k; res = divingBoard(a, b, k); if(res.size() == 0){ cout << "[]" << endl; return 0; } cout << '['; for(int res_i=0; res_i < res.size() - 1; res_i++) { cout << res[res_i] << ','; } cout << res[res.size()-1] << ']' << endl; return 0; }
2.处理输入建树,还要判断不合法
#include <bits/stdc++.h> using namespace std; struct TreeNode { int val; vector<TreeNode *> child; TreeNode(int x) : val(x){} }; map<string, TreeNode*> mp; bool flag; int f(TreeNode* root){ if(root == NULL) return 0; int sum = 0; for(int i = 0 ; i < root->child.size() ; i++){ sum = max(sum, f(root->child[i])); } sum += root->val; if(root->val == -1){ flag = false; } return sum; } int main() { string s; cin >> s; s += '|'; flag = true; for(int i = 0 ; i < s.length() ; i++){ int k = 0; while(s[i + k] != '`'){ k++; } string name = s.substr(i, k); i += k+1; k = 0; int sum = 0; while(s[i+k] != '`'){ sum = sum * 10 + s[i+k] - '0'; k++; } i += k; TreeNode* t; if(mp.find(name) == mp.end()){ t = new TreeNode(sum); mp[name] = t; } else{ t = mp[name]; } t->val = sum; //cout << name << " " << sum << endl; while(s[i] != '|'){ i++; k = 0; while(s[i+k] != ',' && s[i+k] != '|'){ k++; } string name = s.substr(i, k); if(name == "END"){ i += k; if(t->child.size() != 0){ cout << -1 <<endl; return 0; } break; } TreeNode* p; if(mp.find(name) == mp.end()){ p = new TreeNode(-1); mp[name] = p; } else p = mp[name]; t->child.push_back(p); i += k; } //cout << t->val << " " << t->child.size() <<endl; } int ans = f(mp["HEAD"]); if(flag == false) ans = -1; cout << ans << endl; return 0; } /* HEAD`0`A,B,C|A`20`END|B`100`END|C`50`D,E|D`80`F|E`150`END|F`30`END */