zoukankan      html  css  js  c++  java
  • 【PAT甲级】1052 Linked List Sorting (25 分)

    题意:

    输入一个正整数N(<=100000),和一个链表的头结点地址。接着输入N行,每行包括一个结点的地址,结点存放的值(-1e5~1e5),指向下一个结点的地址。地址由五位包含前导零的正整数组成。以头结点地址开始的这条链表以值排序后得到的链表的长度和头结点,接着以升序按行输出每个结点的地址和值以及指向下一个结点的地址。

    trick:

    题干说的postive N可是数据点4出现了N==0的数据,有些不解如果N==0应该包含的话不应该用nonnegative N吗。。。

    数据点1包含有些结点并非在头结点所在的这条链表上。(题干说给一条联通的链表,实际可能有些点并不在该链表上)

    通过一些题目可见,有些trick不会明显的在题干中给出,题干只保证一些一定不会发生的情况,还有一些边界条件以及可能出现的问题需要自行多加考虑。。。。。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 pair<int,int>pr[100007];
     5 pair<int,int>ans[100007];
     6 int main(){
     7     int n;
     8     int add;
     9     scanf("%d%d",&n,&add);
    10     for(int i=1;i<=n;++i){
    11         int x,y,z;
    12         scanf("%d%d%d",&x,&y,&z);
    13         pr[x]={y,z};
    14     }
    15     int cnt=0;
    16     while(1){
    17         if(pr[add].second){
    18             ans[++cnt].first=pr[add].first;
    19             ans[cnt].second=add;
    20             add=pr[add].second;
    21         }
    22         else
    23             break;
    24     }
    25     if(!cnt)
    26         printf("0 -1");
    27     else{
    28         sort(ans+1,ans+1+cnt);
    29         printf("%d %05d
    ",cnt,ans[1].second);
    30         for(int i=1;i<=cnt;++i){
    31             printf("%05d %d ",ans[i].second,ans[i].first);
    32             if(i!=cnt)
    33                 printf("%05d
    ",ans[i+1].second);
    34             else
    35                 printf("-1");
    36         }
    37     }
    38     return 0;
    39 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    最小生成树的解法
    51nod 1212 无向图最小生成树
    greater()和less()的使用
    51nod1183 编辑距离
    51nod 1181 质数中的质数(质数筛法)
    upper_bound和lower_bound的用法
    线段树最全模板
    bryce1010专题训练——线段树习题汇总
    51nod 1174 区间中最大的数
    51nod 1113 矩阵快速幂
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11619280.html
Copyright © 2011-2022 走看看