PAT 1032 (未完成)

  斗智斗勇系列,这个时间限制太变态了,10^5的数据读进去100ms就完蛋,buffer又不能太多开,但是8M buffer开出来其实也没啥用,还是超时

  除去超时数据点,还有一个数据点没有过,不知道是什么边界条件,不管了

  判断两条链表是否相交,首先两条链表都走到最后一个节点,如果节点相同,则说明这两条链表是相交的。算出两条链表的长度,len1,len2,max(len1, len2) - min(len1, len2),长的链表先走diff step,再和短的链表一起走,相遇的节点即为共同节点的起始节点。

  另外学到了,PAT中的JAVA如果是返回非零,则说明存在着异常。前面有数据点返回非零是因为没有判断null。

  

  

  1 import java.util.*;
  2 import java.io.*;
  3
  4 class FastReader{
  5     BufferedReader reader;
  6     StringTokenizer tokenizer;
  7
  8     public FastReader(InputStream stream){
  9         reader = new BufferedReader(new InputStreamReader(stream), 1 << 22);
 10         tokenizer = null;
 11     }
 12
 13     public String next(){
 14         while (tokenizer == null || !tokenizer.hasMoreTokens()){
 15             try {
 16                 tokenizer = new StringTokenizer(reader.readLine());
 17             } catch (Exception e){
 18                 //System.out.println(-1);
 19                 throw new RuntimeException(e);
 20             }
 21         }
 22
 23         return tokenizer.nextToken();
 24     }
 25
 26     public int next_int(){
 27         return Integer.parseInt(next());
 28     }
 29 }
 30
 31 class Node{
 32     int address;
 33     int next_address;
 34     Node next;
 35
 36     public Node(){
 37         next = null;
 38     }
 39 }
 40
 41 public class Main {
 42     public static void main(String[] args){
 43         FastReader reader = new FastReader(System.in);
 44         int first_start, second_start;
 45         int N;
 46
 47         first_start = reader.next_int();
 48         second_start = reader.next_int();
 49         N = reader.next_int();
 50
 51         Node[] nodes = new Node[N];
 52
 53         for (int i = 0; i < N; i++){
 54             int cur_address = reader.next_int();
 55             reader.next();
 56             int next_address = reader.next_int();
 57
 58             Node node = new Node();
 59             node.address = cur_address;
 60             node.next_address = next_address;
 61             nodes[i] = node;
 62         }
 63
 64         Node first_word = null, second_word = null;
 65         for (int i = 0; i < N; i++){
 66             Node cur_node = nodes[i];
 67             if (cur_node.address == first_start)
 68                 first_word = cur_node;
 69             else if (cur_node.address == second_start)
 70                 second_word = cur_node;
 71             for (int j = 0; j < N; j++){
 72                 Node candidate_node = nodes[j];
 73
 74                 if (cur_node.next_address == candidate_node.address){
 75                     cur_node.next = candidate_node;
 76                     break;
 77                 }
 78             }
 79         }
 80
 81         int len1 = 0, len2 = 0;
 82         Node first_ptr = first_word, second_ptr = second_word;
 83
 84         if (first_ptr == null || second_ptr == null){
 85             System.out.println(-1);
 86             return;
 87         }
 88
 89         while (first_ptr.next != null){
 90             first_ptr = first_ptr.next;
 91             len1++;
 92         }
 93         while (second_ptr.next != null){
 94             second_ptr = second_ptr.next;
 95             len2++;
 96         }
 97
 98         if (first_ptr != second_ptr){
 99             System.out.println(-1);
100             return;
101         }
102
103         int diff_step = Math.max(len1, len2) - Math.min(len1, len2);
104         if (len1 < len2){
105             first_ptr = second_word;
106             second_ptr = first_word;
107         } else {
108             first_ptr = first_word;
109             second_ptr = second_word;
110         }
111
112         for (int i = 0; i < diff_step; i++)
113             first_ptr = first_ptr.next;
114         while (first_ptr != second_ptr){
115             first_ptr = first_ptr.next;
116             second_ptr = second_ptr.next;
117         }
118
119         System.out.println(first_ptr.address);
120     }
121 }
时间: 2024-11-05 07:22:35

PAT 1032 (未完成)的相关文章

PAT 1032. Sharing (25)

1032. Sharing (25) To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, "loading" and "being

PAT 1032. 挖掘机技术哪家强

PAT1032. 挖掘机技术哪家强 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出格式: 在一行中给出总得分最高的学校的编号.及其总分,中间以空格分隔.题目保证答案唯一,没有并列. 输入样例: 6 3 65 2 80 1 100 2

PAT 1032. Sharing

其实就是链表求交: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <unordered_map> 5 6 using namespace std; 7 8 class Node { 9 public: 10 Node() : data(0), next(0) {} 11 char data; 12 int next; 13 }; 14 15 void pri

PAT乙级 1032. 挖掘机技术哪家强(20)

1032. 挖掘机技术哪家强(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出格式: 在一行中

PAT Basic 1032

1032 挖掘机技术哪家强 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过10^5^的正整数N,即参赛人数.随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出格式: 在一行中给出总得分最高的学校的编号.及其总分,中间以空格分隔.题目保证答案唯一,没有并列. 输入样例: 6 3 65 2 80 1 100 2 70

PAT乙级1032

题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805289432236032 题解 用数组的下标表示学校,数组元素表示分数.统计各校分数后,遍历求最大就好了. 做这道题遇到一个memset初始化数组元素的问题,具体见https://www.cnblogs.com/chouxianyu/p/11322984.html // PAT BasicLevel 1032 // https://pintia.cn/pro

1032. Sharing (25)【链表】——PAT (Advanced Level) Practise

题目信息 1032. Sharing (25) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix.

PAT (Basic Level) Practice 1032 挖掘机技术哪家强

个人练习 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 10?^5的正整数 N,即参赛人数.随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出格式: 在一行中给出总得分最高的学校的编号.及其总分,中间以空格分隔.题目保证答案唯一,没有并列. 输入样例: 6 3 65 2 80 1 100 2 70

PAT算法题C++实现(Basic)1032 挖掘机技术哪家强

为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式:输入在第 1 行给出不超过 10?5?? 的正整数 N,即参赛人数.随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出格式:在一行中给出总得分最高的学校的编号.及其总分,中间以空格分隔.题目保证答案唯一,没有并列. 输入样例:63 652 801 1002 703 403 0输出样