string s; cin >> s; int ss = s.size(), ans = 0; for (int i = 0; i 26; ++i) t[i] = false;
for (int i = 0; i
if (!t[s[i] - 'A']) t[s[i] - 'A'] = true, ++ans; cout ' ' 'n';
T2 你为什么不空间跳跃
一个分类讨论,三个min就了事了
1 2 3 4 5 6 7 8 9 10
bool t[26]; while (n--) { string s; cin >> s; int ss = s.size(), ans = 0; for (int i = 0; i 26; ++i) t[i] = false;
for (int i = 0; i
if (!t[s[i] - 'A']) t[s[i] - 'A'] = true, ++ans; cout ' ' 'n';
}
T3 搬家到月球
nowtime就是当前的时间,优先队列顶就是下一个要取行李的人到 $0$ 的时间。
开始时,把每个人根据情况放入优先队列:
如果他在下行,那只要走下去就好了:l
如果他在上行,下次到的时间为 (m - l) + m,即到 $m$ 楼再下来的时间
对于每一次搬行李,我们只要取出优先队列顶,将 nowtime 设为它,nowtime + m * 2 就是他下一次回到 $0$ 层取行李的时间,所以我们要把他push回去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
priority_queuelonglong, std::vectorlong long>, std::greaterlong long>> q;
longlong n, m, k; cin >> n >> m >> k; for (int i = 0; i
int l; bool o; cin >> l >> o; if (o) q.push((m - l) + m); else q.push(l); } longlong nowtime; for (int i = 0; i
nowtime = q.top(); q.pop(); q.push(nowtime + m * 2); } cout 'n';
虚拟?:doge: