1052.Linked List Sorting (25)

来源:互联网 发布:嘉合信网络信息技术 编辑:程序博客网 时间:2024/06/05 23:47

1052.Linked List Sorting (25)

pat-al-1052

2017-02-26

  • 最后一个测试点超时,本来以为是开了一个数组、一个vector太大了,就去掉了一个,加上了flagValid判断,排序的时候也要考虑flagValid。结果还是超时,看了书才知道还有全部结点都无效的情况,要特殊判断一下
  • 坑:全部无效时,输出的是0 -1
/** * pat-al-1052 * 2017-02-26 * Cpp version * Author: fengLian_s */#include<stdio.h>#include<algorithm>using namespace std;struct NODE{  int addr;  int key;  int next;  int flagValid;}newNode, list[100010];bool cmp(NODE a, NODE b){  if(a.flagValid == 0 || b.flagValid == 0)    return a.flagValid > b.flagValid;  else    return a.key < b.key;}int main(){  freopen("in.txt", "r", stdin);  int n, start, tmp;  scanf("%d%d", &n, &start);  for(int i = 0;i < n;i++)  {    scanf("%d", &tmp);    list[tmp].addr = tmp;    scanf("%d%d", &list[tmp].key, &list[tmp].next);    list[tmp].flagValid = 0;  }  int cnt = 0, index = start;  while(index != -1)  {    list[index].flagValid = 1;    cnt++;    index = list[index].next;  }  if(cnt == 0)  {    printf("0 0\n");    return 0;  }  sort(list, list+100010, cmp);  for(int i = 0;i < cnt-1;i++)  {    list[i].next = list[i+1].addr;  }  list[cnt-1].next = -1;  printf("%d %05d\n", cnt, list[0].addr);  for(int i = 0;i < cnt;i++)  {    if(list[i].next != -1)      printf("%05d %d %05d\n", list[i].addr, list[i].key, list[i].next);    else      printf("%05d %d -1\n", list[i].addr, list[i].key);  }  return 0;}

-FIN-

0 0
原创粉丝点击