饿了么24秋招工程方向&算法方向题解

小红等外卖

小红在饿了么上面点了一个外卖,饥肠辘辘的她等骑手等得望眼欲穿。

已知小红在时刻t1点了外卖,饿了么上面显示预计送达时间为t2,实际送达时间为t3。请你判断外卖是否超时?

from datetime import datetime, timedelta


def check_delivery_status(t1, t2, t3):
    # 将时间字符串转换为datetime对象
    t1 = datetime.strptime(t1, "%H:%M")
    t2 = datetime.strptime(t2, "%H:%M")
    t3 = datetime.strptime(t3, "%H:%M")

    # 处理跨午夜的情况
    if t2 < t1:
        t2 += timedelta(days=1)
    if t3 < t1:
        t3 += timedelta(days=1)


    # 判断实际送达时间是否超过预计送达时间
    if t3 > t2:
        return "Yes"  # 超时
    else:
        return "No"  # 未超时


# 读取输入
t = int(input().strip())

for _ in range(t):
    t1 = input().strip()
    t2 = input().strip()
    t3 = input().strip()

    # 检查外卖是否超时
    result = check_delivery_status(t1, t2, t3)
    print(result)
在这里插入代码片

最短路径

import sys
from collections import defaultdict
from heapq import *
h = defaultdict(list)
n, m, q = map(int, input().split())
st = [0] * (n + 1)
dist = [10**10] * (n + 1)
for _ in range(m):
    a, b, w = map(int, input().split())
    h[a].append([b, w])
    h[b].append([a, w])
# 堆优化的迪杰斯特拉算法,时间复杂度O(mlogn)
q = []
dist[1] = 0
heappush(q, [0, 1])
while q:
    d, a = q[0]
    heappop(q)
    if st[a]:
        continue
    st[a] = 1
    for b, w in h[a]:
        if not st[b] and(dist[b] > dist[a] + w):
            dist[b] = dist[a] + w
            heappush(q, [dist[a] + w, b])


res = 0
a = list(map(int, input().split()))
for b in a:
    res += dist[b] * 2
print(res)在这里插入代码片

小红的字符串构造

def construct_string(s):
    unique_chars = sorted(set(s))  # 获取去重后的字符集,并排序
    n = len(s)
    t = [''] * n  # 初始化 t 字符串的列表形式
    
    char_count = len(unique_chars)
    char_index = {char: idx for idx, char in enumerate(unique_chars)}
    
    # 尝试不同的偏移量
    for offset in range(1, char_count):
        valid = True
        for i in range(n):
            t[i] = unique_chars[(char_index[s[i]] + offset) % char_count]
            if t[i] == s[i]:
                valid = False
                break
        if valid:
            return ''.join(t)
    
    return "-1"

# 测试
s=input()
t = construct_string(s)
print(t)  # 示例输出: "cbaca" 或其他满足条件的字符串

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string s;
    cin >> s;
    int n = s.length();
    string answer (n, ' ');
    unordered_map<char, vector<int>> occu;
    for (int i = 0; i < n; i++)
        occu[s[i]].push_back(i);
    if (occu.size() == 1)
        cout << "-1";
    else
    {
        vector<char> v;
        for (auto p : occu)
            v.push_back(p.first);
        for (int i = 0; i < v.size(); i++)
        {
            int j = (i + 1) % (v.size());
            for (auto x : occu[v[j]])
                answer[x] = v[i];
        }
        cout << answer;
    }
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值