传送门:
https://pta.patest.cn/pta/test/15/exam/4/question/895
思路:先用并查集确定各个顾客(结点)的父亲,然后依次处理进来的顾客,对每个顾客(A),
找到和他同一个结点的并且离他最近的(B)(输入顺序),看这个结点(B)的开始时间是否小于等于前面顾客的(A)结束时间,
如果是,那这个顾客(B)作为下一个进来的顾客,否则,(除去已经处理过的)最前面的结点作为下一个顾客结点。
在顾客名字的处理上,我借用了map映射,但是map<string,int>这种形式会超时,然后用了map<char*,int>,
在网上查了几篇博客,说要先重载,具体的看下面代码。
我做完后回过头来看到一句话特别有感悟,就是用char*做map参数时,实际参与映射的是指针,而用string时传进去的是一个对象。
所以处理的时候,需要注意一下,具体的还是看下面代码。
1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<map>
5 using namespace std;
6 struct ptrCmp//写一个比较函数,里面重载(),这一段是网上原模原样看过来的
7 {
8 bool operator()(const char*s1,const char*s2)const//结尾有个const,别丢&#x