pat-a1074. Reversing Linked List (25)

    xiaoxiao2021-03-25  122

    之前做过,代码比以前精简一点了。。虽然偷懒用了map..

    测试点其实也不严谨,只有最后一个测试点是没有用完给出的所有节点。。

    后面要做点ccf的题了。。希望今年能取得好成绩

    #include<cstdio> #include<cstring> #include<map> using namespace std; int num[100010]; int nu[100010]; int main(){ int a,b,c,x,y,z; scanf("%d%d%d",&a,&b,&c); map<int,int> an; map<int,int> na; map<int,int> nl; for(int i=0;i<b;++i){ scanf("%d%d%d",&x,&y,&z); an[x]=y; na[y]=x; nl[y]=z; } int t=0; while(a!=-1){ num[t++]=an[a]; a=nl[an[a]]; } int p=t/c; int k=0; for(int i=1;i<=p;++i){ for(int j=i*c-1;j>=(i-1)*c;--j) nu[k++]=num[j]; } for(int i=c*p;i<t;++i) nu[k++]=num[i]; for(int i=0;i<t-1;++i) printf("d %d d\n",na[nu[i]],nu[i],na[nu[i+1]]); printf("d %d -1\n",na[nu[t-1]],nu[t-1]); return 0; }

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output 4→3→2→1→5→6.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (<= 105) which is the total number of nodes, and a positive K (<=N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.

    Then N lines follow, each describes a node in the format:

    Address Data Next

    where Address is the position of the node, Data is an integer, and Next is the position of the next node.

    Output Specification:

    For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

    Sample Input: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 Sample Output: 00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
    转载请注明原文地址: https://ju.6miu.com/read-7880.html

    最新回复(0)