PTA 工作备忘录的生成(链表)
题目:
每天都要处理很多事务,为了更好地安排工作,希望在每天开始工作前,根据工作记录,生成工作备忘录。首先输入工作记录数(大于0的一个整数),再逐条输入各条工作记录,每条工作记录包括:工作名,开始时间,结束时间。假设每项工作的开始时间均小于它的结束时间,并且各项工作的开始时间互不相同。
我们的工作是需要把这些工作记录按开始时间排序并输出,在输出时,如果某项工作与若干项工作冲突(在做该项工作时,需要同时做其它工作),则在该工作名前加’*’。
函数接口定义:
Node* add(Node *, Node *);
void display(Node *);
裁判测试程序样例:
#include
#include
using namespace std;
struct Node{string name;int start;int end;Node *next;
};
Node* add(Node *, Node *);
void display(Node *);
bool check(Node *head)
{if(head == NULL || head->next ==NULL) return true;Node *p=head->next;if(head->start > p->start) return false;return check(p);
}
int main()
{Node *head=NULL, *p;int i, repeat;cin>>repeat;for(i=0;i<repeat;i++){p = new Node;cin>>p->name>>p->start>>p->end;p->next=NULL;head = add(head, p);}if(!check(head)) cout<<"ERROR"<<endl;display(head);return 0;
}
/* 请在这里填写答案 */
输入样例:
4
aaa 19 20
ccc 169 200
ddd 153 170
bbb 20 111
输出样例:
aaa 19 20
bbb 20 111
*ddd 153 170
*ccc 169 200
AC代码:
Node* add(Node* head, Node* newnode)
{if (head == NULL) return newnode;Node* cur = head, * p = NULL;while (cur != NULL && cur->start < newnode->start) {p = cur;cur = cur->next;}if (cur == head) {newnode->next = head;return newnode;}p->next = newnode;newnode->next = cur;return head;
}
void display(Node* head)
{Node* r = head, * cur = head, * p = head->next;Node* max = head;while (p != NULL) {if (p->start < max->end) {p->name = '*' + p->name;if (max->name[0] != '*') max->name = '*' + max->name;}max = p->end > max->end ? p : max;p = p->next;}while (cur != NULL && cur != NULL) {cout << cur->name << ' ' << cur->start << ' '<< cur->end << endl;cur = cur->next;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
