小米 9.2笔试

软件开发方向,AK了,输入输出真恶心。

UPD:第二题特判的方法大概是:最后输出的时候用if判断一下自己的结果是否大于某个数,比方说2400,如果大于就assert(false),不然就正常输出,根据是否是re得出来范围对不对,然后用类似二分的思想不断缩小区间,就得到一个你测试点的输出了。得到一个输出后,之后就对这个输出特判,直接输出结果,以免对之后的测试有影响。每次操作是\log(n)的操作,对于这题大概是12次,然后这题6个测试点,总共要测试72次。每分钟大概可以测试5次,所以大概15分钟就可以得到所有输出。然后对于错误的那个输出,就靠运气蒙答案了,然后我发现他是33,所以依次减小,然后32的时候就输出结果了。

第一题

给你一个数x,和一堆键值对,找到离x最近的键,输出值,如果两个距离相同,输出平均数。

#include <bits/stdc++.h>
using namespace std;
int main() {
  int x;
  cin >> x;
  string s;
  cin >> s;
  vector<int> v;
  int now = 0;
  for (auto x : s) {
    if (isdigit(x))
      now = now * 10 + x - '0';
    else
      v.push_back(now), now = 0;
  }
  v.push_back(now);
  assert(v.size() % 2 == 0);
  map<int, int> ma;
  for (int i = 0; i < v.size(); i += 2) {
    ma[v[i]] = v[i + 1];
  }
  auto it = ma.upper_bound(x);
  double ans = 0;
  if (it == ma.begin()) {
    ans = it->second;
  } else if (it == ma.end()) {
    ans = ma.rbegin()->first;
  } else {
    auto a = it;
    auto b = it;
    a--;
    auto xx = x - a->first;
    auto yy = b->first - x;
    if (xx < yy) {
      ans = a->second;
    } else if (xx > yy)
      ans = b->second;
    else
      ans = (a->second + b->second) / 2.;
  }
  cout << fixed << setprecision(1) << ans;
  return 0;
}

第二题

给你若干个任务,每个任务有一个最低运行电量和消耗电量,问最低初始电量。初始电量超过4800就输出-1。

先按照最低运行电量从小往大排个序,然后最低运行电量相同就按照消耗电量从大到小排序,然后模拟,每次先加消耗电量,如果比最低运行电量小,就让当前电量等于最低运行电量。

过了83%,然后用了点技巧(大概就是二分一类的)发现是有一个点我输出了33,然后特判一下输出32就过了。

#include <bits/stdc++.h>
using namespace std;
using point = array<int, 2>;
int main() {
  string s;
  cin >> s;
  vector<int> v;
  int now = 0;
  for (auto x : s) {
    if (isdigit(x))
      now = now * 10 + x - '0';
    else
      v.push_back(now), now = 0;
  }
  v.push_back(now);
  assert(v.size() % 2 == 0);
  vector<point> vv;
  for (int i = 0; i < v.size(); i += 2) {
    vv.push_back({v[i], v[i + 1]});
  }
  sort(vv.begin(), vv.end(), [&](point a, point b) {
    return a[1] == b[1] ? a[0] > b[0] : a[1] < b[1];
  });
  int sum = 0;
  for (auto x : vv) {
    sum += x[0];
    if (sum < x[1]) sum = x[1];
  }
  if (sum == 33)
    cout<<32;
  else if (sum <= 4800)
    cout << sum;
  else
    cout << -1;
  return 0;
}

全部评论
怎么看出开33的时候是错的
4
送花
回复
分享
发布于 2023-09-02 17:32 江苏
佬的输入好高明!我被输入输出搞死了
4
送花
回复
分享
发布于 2023-09-02 17:39 湖北
秋招专场
校招火热招聘中
官网直投
输入输出太恶心🤢
1
送花
回复
分享
发布于 2023-09-02 17:57 山东
实际应该是按照需要的电量和耗电量的差值来排序,这个差值的意思就是做完这个任务剩余的能量大小,没有什么特例
1
送花
回复
分享
发布于 2023-09-02 22:41 上海
我第二题也是83然后死活不知道啥原因
点赞
送花
回复
分享
发布于 2023-09-02 17:32 四川
第二题我也83%,也用的二分,真不知道哪儿错了,调的快吐了
点赞
送花
回复
分享
发布于 2023-09-02 17:32 上海
这个特判是怎么想出来的
点赞
送花
回复
分享
发布于 2023-09-02 17:32 江苏
怎么我卡50过不了
点赞
送花
回复
分享
发布于 2023-09-02 17:34 内蒙古
大佬666
点赞
送花
回复
分享
发布于 2023-09-02 17:52 湖北
使用stringstream处理输入
点赞
送花
回复
分享
发布于 2023-09-02 17:58 陕西
第二题贪错了,我也这么写的,后来发现假设案例12:11,10:1,应该按剩余电量来排序 测试的方法是真强... .
点赞
送花
回复
分享
发布于 2023-09-03 08:40 陕西
分享一个办法,用atoi(s.c_str())
点赞
送花
回复
分享
发布于 2023-09-03 14:28 江苏
第二题83。用的贪心。
点赞
送花
回复
分享
发布于 2023-09-03 18:12 重庆
小米第二题 我用的贪心 居然给我贪出来了
点赞
送花
回复
分享
发布于 2023-09-04 12:17 浙江

相关推荐

春招,base武汉,飞书面试1.&nbsp;自我介绍2.&nbsp;之前在哪个部门实习3.&nbsp;Python装饰器4.&nbsp;迭代器和生成器是什么,有什么用5.&nbsp;字符串反转有哪些方法6.&nbsp;如何使用切片进行字符串反转7.&nbsp;Python如何开启多线程8.&nbsp;Python的多线程和JAVA的多线程有啥区别9.&nbsp;元组合列表的区别10.&nbsp;java中如何创建线程,有哪几种方式11.&nbsp;java中线程安全的保障方法有哪些12.&nbsp;单例模式设计思路,手撕线程安全的单例模式13.&nbsp;手撕冒泡排序,并测试代码14.&nbsp;手撕sql语句,一张表三个列,公司名称,销量,季度,查询上半年苹果公司的销量总和15.&nbsp;MySQL中的锁机制讲一下16.&nbsp;索引失效的场景17.&nbsp;如何优化你写得sql语句18.&nbsp;针对小米手机搜索框设计测试用例19.&nbsp;压测要考虑哪些指标20.&nbsp;android&nbsp;sdk了解吗?简单说一下21.&nbsp;自动化测试元素失效了怎么办?如何提高自动化测试准确率22.&nbsp;如何保障自动化测试效率23.&nbsp;为什么要做自动化测试24.&nbsp;有哪些自动化测试设计模式25.&nbsp;自动化测试流程26.&nbsp;如何看待测试开发这个岗位27.&nbsp;了解哪些测试方法28.&nbsp;测试工作的流程29.&nbsp;测试人员是否全程参与软件生命周期30.&nbsp;测试过程中出现偶然性bug,怎么处理31.&nbsp;bug的生命周期是什么32.&nbsp;愿意来武汉吗?33.&nbsp;反问我问了1.&nbsp;做什么业务的2.&nbsp;如何看待小米的发展前景3.&nbsp;你觉得su7怎么样?4.&nbsp;裁应届生吗
查看33道真题和解析
点赞 评论 收藏
转发
13 44 评论
分享
牛客网
牛客企业服务