7-1 列车厢调度 (PTA - 数据结构)

话不多说,直接上代码

#include <bits/stdc++.h>

using namespace std;

vector<string> ans;

int main() {

    string a, b;

    cin >> a >> b;

    stack<char> q1;

    int idx = 0;

    for (int i = 0; i < a.size(); i++) {

        while (!q1.empty() && q1.top() == b[idx]) {

            ans.push_back("3->2");

            q1.pop();

            idx++;

        }

        if (a[i] == b[idx]) {

            ans.push_back("1->2");

            idx++;

        } else {

            q1.push(a[i]);

            ans.push_back("1->3");

        }

        if (idx == b.size()) {

            for (const string &op : ans) {

                cout << op << endl;

            }

            return 0;

        }

    }

    while (!q1.empty() && q1.top() == b[idx]) {

        ans.push_back("3->2");

        q1.pop();

        idx++;

    }

    if (idx != b.size()) {

        cout << "Are you kidding me?" << endl;

    } else {

        for (const string &op : ans) {

            cout << op << endl;

        }

    }

    return 0;

}

### PTA调度问题的Java实现 PTA中的调度问题是经典的贪心算法应用之一。其核心思想在于通过维护一组有序集合来模拟轨道分配过程,从而找到最少所需的轨道数量。 以下是基于上述描述的一个完整的Java实现: #### Java代码实现 ```java import java.util.*; public class TrainSchedule { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 输入车数 TreeSet<Integer> tracks = new TreeSet<>(); // 使用TreeSet自动排序 for (int i = 0; i < n; i++) { int trainNumber = scanner.nextInt(); Integer ceilingTrain = tracks.ceiling(trainNumber); // 找到大于等于当前车号的第一个车 if (ceilingTrain != null) { // 如果存在这样的车,则替换掉该位置上的车 tracks.remove(ceilingTrain); } tracks.add(trainNumber); // 将当前车加入对应的轨道 } System.out.println(tracks.size()); // 输出所需轨道的数量 } } ``` #### 关键点解析 1. **数据结构的选择** 上述程序中使用`TreeSet`作为主要的数据结构[^1]。这是因为`TreeSet`能够提供高效的查找功能(如`lower_bound`),并能保持元素的自然顺序排。 2. **逻辑流程说明** 对于每一个输入的车编号$x$,首先尝试找到一个已经存在的、比$x$大的最小车编号。如果找到了这个编号,则将其移除,并将新的车编号插入对应的位置;如果没有找到,则直接新增一条轨道用于放置这辆车。 3. **时间复杂度分析** 每次操作的时间复杂度为$\log N$,其中$N$表示已有的轨道数目。因此整个算法的时间复杂度为$O(N \cdot \log N)$,适合处理较大的输入规模。 --- #### 注意事项 - 需要特别注意的是,在实际编程竞赛环境中可能遇到极端测试用例,比如所有车都按降序到达的情况。这种情况下,每辆车都需要单独占用一条轨道,最终的结果将是$n$条轨道。 - 此外,由于题目通常会涉及大量的输入/输出操作,建议优化I/O效率以避免超时风险。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值