{nowcoder-vote}{56876}    1、魔法外卖   解法:贪心,配送时间小于订单超时时间就可以不使用魔法,AC    代码:  #include<iostream>#include<vector>#include<algorithm>using namespace std;int main() {  int n, t;    cin >> n >> t;  // n为订单数,t为每单派送时间  int num;          vector<int> nums(n);  // n个订单的超时时间  for(int i = 0; i < n; ++i) {      cin >> num;    nums[i] = num;  }  sort(nums.begin(), nums.end());  int count = 0;     // 最少使用几次魔法  int time = 0;      // 配送花费总时间  for(int i = 0; i < n; ++i) {    if(t + time <= nums[i]) { // 时间小于等于超时时间则不需要使用魔法      time += t;    }    ++count;  }  cout << count << endl;  return 0;} 2、扫地机器人   解法:力扣岛屿问题变种,AC    代码:  #include<iostream>#include<vector>#include<algrithm>using namespace std;int main() {    int n, m, k; // n*m房间,k长度指令字符串,均为大写  cin >> n >> m >> k;  string str;  cin >> str;  vector<vector<bool>> map(n, vector<bool>(m, false));  int x = 0, y = 0;  map[x][y] = true;  int clean = 1; // 记录已清理的数量  int i;  for(i = 0; i < k; ++i) {    if(str[i] == 'W') {    // 上      if(x > 0) {        --x;      }     }    if(str[i] == 'S') {    // 下      if(x + 1 < n) {        ++x;      }    }    if(str[i] == 'A') {    // 左        if(y > 0) {        --y;      }    }    if(str[i] == 'D') {    // 右      if(y + 1 < m) {        ++y;      }    }    if(map[x][y] == false) {        ++clean;      map[x][y] = true;    }    if(clean == n * m) break;  }  if(clean == n * m) {      cout << "Yes" << endl;    cout << i + 1;  } else {      cout << "No" << endl;    cout << n * m - clean;  }    return 0;} 3、扑克   解法:双端队列,反向推导,AC    代码:  #include<iostream>#include<algorithm>#include<vector>#include<deque>using namespace std;int main() {  int n;  // n张牌  cin >> n;  vector<int> nums(n);  int num;  for(int i = 0; i < n; ++i) {    cin >> num;    nums[i] = num;  }  deque<int> myDeque;  for(int i = n - 1; i >= 0; --i) {    myDeque.push_front(nums[i]);    int people = 2;    while(people--) {      myDeque.push_front(myDeque.back());      myDeque.pop_back();    }  }  for(const auto& it : myDeque) {    cout << it << " ";  }  return 0;} 4、合法元数组   解法:回溯,通过82,部分超时    代码:  #include<iostream>#include<algorithm>#include<vector>using namespace std;vector<int> path;void backtracing(vector<int>& nums, int startIndex, int& ans) {  if(path.size() > 3) return;  if(path.size() == 3) {    if((path[0] - path[1]) - (2 * path[1] - path[2]) == 0) {      ++ans;    }    return;  }  for(int i = startIndex; i < nums.size(); ++i) {    path.push_back(nums[i]);    backtracing(nums, i + 1, ans);    path.pop_back();  // 回溯  }  }int main() {  int n;  // 序列长度  cin >> n;  vector<int> nums(n);  int num;  for(int i = 0; i < n; ++i) {    cin >> num;    nums[i] = num;  }  int ans = 0;  backtracing(nums, 0, ans);  cout << ans << endl;  return 0;} 5、生活在树上   解法:数组当树然后遍历,AC    代码:  #include<iostream>#include<algorithm>#include<vector>using namespace std;int traversal(vector<int>& nums, int index, int length) {  if(index >= length) return 0;  int l = traversal(nums, 2 * index, length) + nums[index];  // 左子树  int r = traversal(nums, 2 * index + 1, length) + nums[index]; // 右子树  return max(l, r);}int main() {  int n;  // 序列长度  cin >> n;  vector<int> nums(n + 1);  nums[0] = 0;  int num;  for(int i = 1; i < n + 1; ++i) {    cin >> num;    nums[i] = num;  }  int res = traversal(nums, 1, nums.size());  cout << res << endl;  return 0;} 有没有大佬第四题ac的求指导一下 
点赞 1
评论 2
全部评论

相关推荐

不懂!!!:感觉你的项目描述太简单了,建议使用star描述法优化提炼一下,就是使用什么技术或方案解决了什么问题,有什么效果或成果,例如:对axios进行了二次封装,实现了请求的统一管理、错误的集中处理以及接口调用的简化,显著提高了开发效率和代码维护性,使用canvas技术实现了路线绘制功能,通过定义路径绘制函数和动态更新机制,满足了简化的导航可视化需求,提升了用户体验。像什么是使用其他组件库,基本功能描述就最好不要写到项目成果里面去了,加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务