1025(21)

package com.company;

import java.util.Scanner;

public class Main {

    private static int m;

    public static void main(String[] args) {
    // write your code here
        Scanner sc=new Scanner(System.in);
        String nodex=sc.next();
        int n=sc.nextInt();
        int k=sc.nextInt();
        String[] first=new String[n];
        int[] num=new int[n];
        String[] last=new String[n];
        String[] address=new String[n+1];
        for (int i=0;i<n;i++){
            first[i]=sc.next();
            num[i]=sc.nextInt();
            last[i]=sc.next();
        }
        //获取链表address
        for (int i=1;i<n+1;i++){
            for (int j=0;j<n;j++){
                if (i==num[j]){
                    address[i-1]=first[j];
                }
                if (num[j]==n){
                    address[n]=last[j];
                }
            }
        }
        //接下来将address进行反转
        String[] reverse=new String[n+1];
        int count=(n+1)/k;
        for (int i=0;i<count;i++){
            for (int j=i*k,m=0;j<k*(i+1);j=j+1,m++){
                if (i+1<=count&&m<k){
                    reverse[j]= address[(i+1)*k-m-1];
                }

            }
            m=0;
        }
        //倒转数组reverse
        for (int i=k*count;i<n+1;i++){
            reverse[i]=address[i];
        }

        for (int j=0;j<n;j++){
            for (int i=0;i<n;i++){
                if (reverse[j]==first[i]){
                    System.out.println(reverse[j]+" "+num[i]+" "+reverse[j+1]);
                }

            }
        }
    }
}

 很痛苦的java选手,明明做出来了,却被判0分,一个超时,其它全错。牛客上一个正确,其它全超时!和qq群里的一个朋友交流,他说这个题目给的输入的n行数据里面的中间项数字并不是链表的顺序,链表头应由输入的第一个目标地址决定。改了一下程序,得21分,一个超时一个错误,和那位哥们结果一样,他还用上了数据结构的知识,不深究,现就这样,上代码

import java.util.Scanner;

public class Main {

    private static int m;

    public static void main(String[] args) {
    // write your code here
        Scanner sc=new Scanner(System.in);
        String nodex=sc.next();
        int n=sc.nextInt();
        int k=sc.nextInt();
        String[][] str=new String[n][3];

        for (int i=0;i<n;i++){
            str[i][0]=sc.next();
            str[i][1]=sc.next();
            str[i][2]=sc.next();
        }
        //获取链表address
        /* 已知链表第一个元素
        * 根据第一个元素查询二链表,获取下一个元素
        * */
        String[] address=new String[n+1];
        address[0]=nodex;
        for (int i=0;i<n+1;i++){
            for (int j=0;j<n;j++){
                if (address[i].equals(str[j][0])){
                    address[i+1]=str[j][2];
                }
            }
        }

        //接下来将address进行反转
        String[] reverse=new String[n+1];
        int count=(n+1)/k;
        for (int i=0;i<count;i++){
            for (int j=i*k,m=0;j<k*(i+1);j=j+1,m++){
                if (i+1<=count&&m<k){
                    reverse[j]= address[(i+1)*k-m-1];
                }

            }
            m=0;
        }
        //倒转数组reverse
        for (int i=k*count;i<n+1;i++){
            reverse[i]=address[i];
        }

        for (int j=0;j<n;j++){
            for (int i=0;i<n;i++){
                if (reverse[j].equals(str[i][0])){
                    System.out.println(reverse[j]+" "+str[i][1]+" "+reverse[j+1]);
                }

            }
        }
    }
}

 

posted @ 2018-10-12 00:21  博客园机器人  阅读(208)  评论(0)    收藏  举报