小红等外卖
小红在饿了么上面点了一个外卖,饥肠辘辘的她等骑手等得望眼欲穿。
已知小红在时刻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;
}
}