工作之后的第一个聚餐

昨天晚上参加了入职后的首次聚餐,同事们的关照让我感受到团队的温暖。在聚餐中体验了由机器人送餐的服务,这让我深刻体会到人工智能技术已融入日常生活。这次经历也提醒我必须不断提升自己,以适应快速发展的科技时代。

昨天晚上是从岳城毕业后到公司第一个聚餐 ,这里的同事对我这个初入职场的妹妹还是很关照 ,在这里跟着前辈学到了不少东西,人们常说 生活就是经历就是成长,的确是这样的 。这个聚餐来到了一个比较特殊的地方,既然是机器人直接送餐 ,真的说科技发达,人工智能已经进入了人们的生活 ,未来还会有许多这样的进入生活  ,要跟上时代的脚步,不断的提升自己,才会更好的适应这个社会的变化 ,努力让自己变的更好,让未来不会留下遗憾,不管怎么样,曾经的自己努力过 。

我们来详细分析并解决这道题:**第10题 订餐** --- ## 🧠 一、题目理解 Peter 要做以下事情: 1. 从 **家** 出发,按顺序走访 `n` 家火锅店: - 先到第1家 - 再到第2家 - ... - 最后到第 `n` 家 2. 走访过程中**不停留**(忽略停留时间),只记录移动时间。 3. 走完第 `n` 家后,他决定去第 `x` 家火锅店订桌。 4. 于是他要从第 `n` 家火锅店**立刻返回第 `x` 家火锅店**。 5. 求:从出发到最终到达第 `x` 家火锅店完成订桌的**总时间**。 --- ## 🚶‍♂️ 二、路径分解 整个行程分为两部分: ### ✅ 第一部分:从家出发,走遍前 n 家火锅店(顺序走) - 时间 = 家 → 第1家 + 第1家 → 第2家 + ... + 第n-1家 → 第n家 - 这个就是输入第二行的 `n` 个数之和 记作: ```text total_forward = time[0] + time[1] + ... + time[n-1] ``` ### ✅ 第二部分:从第 `n` 家火锅店返回第 `x` 家火锅店 注意:这些时间是**单向给出的**,但我们假设可以原路返回,且时间可逆。 所以: - 从第 `n` 家回到第 `x` 家,需要经过: - 第 `n` 家 → 第 `n-1` 家 → ... → 第 `x+1` 家 → 第 `x` 家 - 所需时间为: ```text back_time = time[x] + time[x+1] + ... + time[n-1] ``` > 注意:`time[i]` 表示的是 **第 i 家到第 i+1 家的时间** > > 所以从第 `x` 到第 `x+1` 是 `time[x]`,反过来也用这个值 但我们要的是 **从第 `n` 家回到第 `x` 家**,即跨越区间 `[x, x+1), (x+1, x+2), ..., (n-1, n)` 的反向 👉 所以返回时间 = `sum(time[x : n])` 也就是从索引 `x` 到 `n-1` 的所有时间之和(因为数组下标从0开始) --- ## ✅ 三、举例子验证 ### 输入样例: ```text 4 1 2 3 4 3 ``` - `n = 4` - `time = [1, 2, 3, 4]` - 家 → 1号店:1 - 1号 → 2号:2 - 2号 → 3号:3 - 3号 → 4号:4 - `x = 3` → 去第 3 家店订桌 ### 步骤: 1. 前进总时间: - `1 + 2 + 3 + 4 = 10` 2. 返回时间:从第4家回到第3家 - 只需要走:第4家 ← 第3家,对应 `time[2] = 3`(即第3家到第4家的反向) - 因为 `x=3`,对应的是第3家店,索引是 `x-1 = 2`?不!注意! ⚠️ 关键点:输入中的 `x` 是“第几家”,不是数组下标。 我们需要从第 `n=4` 家返回到第 `x=3` 家 中间经过的路段是:第3家 ↔ 第4家 → 对应 `time[3]`?不对! 再看输入定义: > 第二行:第一个整数是家到第一家的时间;第 `i` 个整数是第 `i-1` 家到第 `i` 家的时间 所以: - `time[0]`: 家 → 1号 - `time[1]`: 1号 → 2号 - `time[2]`: 2号 → 3号 - `time[3]`: 3号 → 4号 👉 所以从第4家回第3家,只需要走 `time[3]` 这一段,耗时 `4` 所以返回时间 = `4` ❌ 错误思路:用 `x` 当成起点索引 ✅ 正确逻辑: - 从第 `n` 家回到第 `x` 家,需要走的路段是从第 `x` 家到第 `x+1` 家,一直到第 `n-1` 家到第 `n` 家 - 即:`time[x]` 到 `time[n-1]`(数组下标) 但是注意: - 第 `x` 家到第 `x+1` 家 是 `time[x]` 吗? | 店铺间 | 数组索引 | |--------|----------| | 家 → 1号 | `time[0]` | | 1号 → 2号 | `time[1]` | | 2号 → 3号 | `time[2]` | | 3号 → 4号 | `time[3]` | 所以: - 第 `i` 家 → 第 `i+1` 家 是 `time[i]`,其中 `i` 从 0 开始(第0家是家?不是) 更准确地说: - `time[i]` 是从第 `i` 个地点到第 `i+1` 个地点的时间 - `i=0`: 家 → 第1家 - `i=1`: 第1家 → 第2家 - ... - `i=n-1`: 第 `n-1` 家 → 第 `n` 家 因此,从第 `n` 家返回第 `x` 家,需要倒着走过: - 第 `n` 家 ← 第 `n-1` 家 ← ... ← 第 `x` 家 - 经过的边是:`time[x-1]`, `time[x]`, ..., `time[n-1]` ❌ 不对 等一下! 比如 `x=3`,我们要回到第3家店,那它前面是第2家店,后面是第4家店。 从第4家回第3家,只经过 `time[3]`(即第3家→第4家)的反向 所以: - 从第 `n` 家回到第 `x` 家,经过的边是: - 第 `x` 家 → 第 `x+1` 家 (`time[x]`) - ... - 第 `n-1` 家 → 第 `n` 家 (`time[n-1]`) 这些边都要走回来 👉 所以返回时间 = `sum(time[x : n])`,其中 `x` 是从第 `x` 家到第 `x+1` 家的索引? 不对!第 `x` 家到第 `x+1` 家是 `time[x]`?不是! - 第1家 → 第2家:`time[1]` - 第2家 → 第3家:`time[2]` - 第3家 → 第4家:`time[3]` 所以: - 第 `k` 家 → 第 `k+1` 家 的时间是 `time[k]` 那么: - 从第 `n` 家回到第 `x` 家,需要经过: - 第 `x` 家 ← 第 `x+1` 家 ← ... ← 第 `n` 家 - 经过的边是:第 `x` 到 `x+1`,`x+1` 到 `x+2`,...,`n-1` 到 `n` - 对应数组索引:`time[x]`, `time[x+1]`, ..., `time[n-1]` 但是注意:`x` 是“第几家”,比如 `x=3`,表示第3家店 那么从第3家到第4家是 `time[3]`?是的! 所以: - 返回时间 = `time[x] + time[x+1] + ... + time[n-1]` - 索引范围:`i = x` 到 `n-1` 但 `x` 是第几家,而 `time[x]` 是第 `x` 家到第 `x+1` 家的时间 —— 是合法的! 例如 `x=3`,`n=4`: - 返回时间 = `time[3]`(只有第3家到第4家这段) - 即 `4` 单位时间 前进时间 = `1+2+3+4 = 10` 总时间 = `10 + 4 = 14` ✅ 匹配输出 --- ## ✅ 四、算法步骤总结 1. 读入 `n` 2. 读入 `n` 个时间,存入数组 `t[0..n-1]` 3. 读入 `x`(要去订桌的第 `x` 家火锅店) 4. 前进总时间 = 所有 `t[i]` 之和(`i=0` 到 `n-1`) 5. 返回时间 = `sum(t[x : n])` = `t[x] + t[x+1] + ... + t[n-1]` 6. 总时间 = 前进 + 返回 --- ## ✅ C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int t[1000]; // 题目没说 n 多大,但数据小,设大点没问题 for (int i = 0; i < n; i++) { cin >> t[i]; } int x; cin >> x; // 前进总时间 int forward_time = 0; for (int i = 0; i < n; i++) { forward_time += t[i]; } // 返回时间:从第 n 家回到第 x 家 // 需要走的路段:第 x 家 → 第 x+1 家, ..., 第 n-1 家 → 第 n 家 // 对应 t[x] 到 t[n-1](注意:x 是第几家,t[x] 是第 x 家到第 x+1 家的时间) int return_time = 0; for (int i = x; i < n; i++) { // i 从 x 开始,不是 x-1 return_time += t[i]; } cout << forward_time + return_time << endl; return 0; } ``` --- ## ✅ 再验证样例 输入: ``` 4 1 2 3 4 3 ``` - `forward_time = 1+2+3+4 = 10` - `return_time = t[3] = 4`(因为 `x=3`,循环 `i=3` 到 `3`) - 总时间 = `10 + 4 = 14` ✅ --- ## ✅ 边界情况测试 ### 测试1:x = 1(回第一家) - `return_time = t[1] + t[2] + ... + t[n-1]` - 即从第1家到第n家的所有后续段 - 正确 ### 测试2:x = n(就在最后一家订) - `return_time = sum(t[n : n]) = 0` - 总时间 = 前进时间 ✅ 正确 --- ## ✅ 复杂度 - 时间:O(n) - 空间:O(n) - 满足 1s 和 256MB 要求 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值