C++ 解题:ABC005C - 好吃的章鱼烧的卖法

题目描述

高橋君は、たこ焼きをどの順番で売るか悩んでいました。というのも、作り置きされたたこ焼きは美味しくないとわかっているので、高橋君はそのようなたこ焼きを売りたくないのですが、できたてばかり売ってしまうと売れるたこ焼きの数が減ってしまいます。

また、お客さんを待たせてばかりだと、次第にお客さんが離れてしまうだろうと高橋君は考えています。
そこで、彼は 'T' 秒以内に作成されたたこ焼きを売り続けることで、お客さんを捌ききれるかどうかを調べることにしました。

たこ焼きは 'A1'、'A2'、…、'AN' 秒後に焼きあがります。
お客さんは 'B1'、'B2'、…、'BM' 秒後にやってきます。
'1' 人のお客さんに対して、たこ焼きを '1' つ売るとします。すべてのお客さんにたこ焼きを売れるならyes、売れないならnoを出力して下さい。

输入格式

'T' 'N'
'A1' 'A2' ... 'AN'
'M'
'B1' 'B2' ... 'BM'

输出格式

すべてのお客さんにたこ焼きをすぐ売れるならyes、売れないならnoを出力して下さい。

また、出力の末尾には改行を入れて下さい。

C++ 代码实现

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int T, N, M;
    cin >> T >> N;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }
    cin >> M;
    vector<int> B(M);
    for (int i = 0; i < M; ++i) {
        cin >> B[i];
    }

    // 对章鱼烧制作时间和顾客到达时间进行排序
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());

    // 遍历顾客到达时间
    int j = 0; // 章鱼烧索引
    for (int i = 0; i < M; ++i) {
        // 寻找可供出售的章鱼烧
        while (j < N && A[j] <= B[i] && A[j] <= T) {
            ++j;
        }
        // 如果没有可供出售的章鱼烧,则输出'no'
        if (j == N) {
            cout << 'no' << endl;
            return 0;
        }
    }
    // 如果所有顾客都能买到章鱼烧,则输出'yes'
    cout << 'yes' << endl;
    return 0;
}

代码解释

  1. 读取输入数据: 使用cin读取输入数据,并存储在相应的变量中。
  2. 排序: 对章鱼烧制作时间A和顾客到达时间B进行排序,方便后续的匹配。
  3. 遍历顾客到达时间: 遍历每个顾客的到达时间Bi
  4. 寻找可供出售的章鱼烧:A数组中找到第一个满足以下条件的章鱼烧:
    • 章鱼烧制作时间Aj 小于等于 顾客到达时间Bi
    • 章鱼烧制作时间Aj 小于等于 可持续销售时间T
  5. 判断是否能卖出所有章鱼烧: 如果找不到可供出售的章鱼烧,则输出no,否则继续遍历下一个顾客。
  6. 输出结果: 如果所有顾客都能买到章鱼烧,则输出yes

总结

本篇文章介绍了如何使用 C++ 语言解决 AtCoder ABC005C 题目。代码使用了排序和双指针的技巧,高效地判断是否能卖出所有章鱼烧。希望这篇文章能够帮助你理解题目,并掌握 C++ 代码实现方法。


原文地址: http://www.cveoy.top/t/topic/pHZ9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录