设 \(f_i\) 表示对于前 \(i\) 个顾客开票所需的最短时间,\(f_i=\max\{f_{i-1}+a_i,f_{i-2}+b_i\}\)
左边表示单选,右边表示一块选。
// #define FILE_INPUT
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;#define rep(i, a, b) for (int i = a, END##i = b; i <= END##i; i++)
#define per(i, a, b) for (int i = a, END##i = b; i >= END##i; i--)void Init();
void Solve();signed main() {// cin.sync_with_stdio(0);// cin.tie(0), cout.tie(0);#ifdef FILE_INPUTfreopen("input.in", "r", stdin);#endifint T = 1;cin >> T;while (T--) {Init();Solve();}return 0;
}using LL = long long;
using ULL = unsigned long long;const int Mod = 1e9 + 7;
const int Inf = 0x3f3f3f3f;
const LL InfLL = 0x3f3f3f3f3f3f3f3f;const int N = 1e6 + 10;
int f[N], n, a[N], b[N];void Init() {
}void Solve() {cin >> n;rep(i, 1, n) cin >> a[i];rep(i, 2, n) cin >> b[i];f[1] = a[1];rep(i, 2, n) f[i] = min(f[i - 2] + b[i], f[i - 1] + a[i]);int s = f[n];int mi = s / 60; s %= 60;int h = mi / 60 + 8; mi %= 60;if (h < 12) printf("%02d:%02d:%02d am\n", h, mi, s);else if (h == 12) printf("%02d:%02d:%02d pm\n", h, mi, s);else printf("%02d:%02d:%02d pm\n", h - 12, mi, s);
}