1032. Sharing (25)

原创 2016年08月28日 16:41:44

1032. Sharing (25)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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" are stored as showed in Figure 1.


Figure 1

You are supposed to find the starting position of the common suffix (e.g. the position of "i" in Figure 1).

Input Specification:

Each input file contains one test case. For each case, the first line contains two addresses of nodes and a positive N (<= 105), where the two addresses are the addresses of the first nodes of the two words, and N is the total number of nodes. The address of a node is a 5-digit positive 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 the letter contained by this node which is an English letter chosen from {a-z, A-Z}, and Nextis the position of the next node.

Output Specification:

For each case, simply output the 5-digit starting position of the common suffix. If the two words have no common suffix, output "-1" instead.

Sample Input 1:
11111 22222 9
67890 i 00002
00010 a 12345
00003 g -1
12345 D 67890
00002 n 00003
22222 B 23456
11111 L 00001
23456 e 67890
00001 o 00010
Sample Output 1:
67890
Sample Input 2:
00001 00002 4
00001 a 10001
10001 s -1
00002 a 10002
10002 t -1
Sample Output 2:
-1
#include<stdio.h>

struct node{
	int address;
	char data;
	int next;
	int visited;
} word[100000];

int main(){
	int start[2];
	struct node temp;
	int n;
	scanf("%d %d %d", &start[0], &start[1], &n);
	while (n--){
		scanf("%d %c %d", &temp.address, &temp.data, &temp.next);
		word[temp.address] = temp;
	}
	while (start[0] != -1){
		word[start[0]].visited = 1;
		start[0] = word[start[0]].next;
	}
	while (1){
		if (start[1] == -1){
			printf("-1\n");
			break;
		}
		else if (word[start[1]].visited == 1){
			printf("%05d\n", start[1]);
			break;
		}
		start[1] = word[start[1]].next;
	}
	return 0;
}



1032. Sharing (25) -set运用

这道题目的关键词是suffix,suffix是后缀、词尾的意思,因此这道题目的难度有所降低,可以通过从尾部向前检索的方法来找到共同部分,但是题目所给的显然是单向链表结构,难以倒着查找,如果使用此方法还...
  • xyt8023y
  • xyt8023y
  • 2015年06月09日 13:03
  • 591

1032. Sharing (25) PAT甲级

传送门#include#define MAX_N 1000100struct Node{ char data; int next; bool flag; }node[MAX_N...
  • SY_Yu
  • SY_Yu
  • 2017年02月07日 14:14
  • 352

PAT 1032. Sharing (25)

1032. Sharing (25) 题意:找到公共后缀起始的地方。用map记录该路径是否被访问过,flag表示是否存在公共后缀。 最后一个例子对时间卡的很紧,用cin 或 t[i].ch 可能就卡...
  • zhengweijian15
  • zhengweijian15
  • 2014年02月22日 23:47
  • 404

PAT:1032. Sharing (25)

Sharing 2012年浙江大学计算机及软件工程研究生机试真题 To store English words, one method is to use linked lists and store...
  • ZJFCLH
  • ZJFCLH
  • 2014年03月18日 16:48
  • 779

1032. Sharing (25) PAT

1032. Sharing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C...
  • rzdyzx
  • rzdyzx
  • 2017年10月01日 19:41
  • 59

pat 1032. Sharing (25)

建两条双向链表,然后从后向前比较#include #define SIZE 100000 struct list{ int add; struct list *next, *forwa...
  • andyyang0212
  • andyyang0212
  • 2015年03月08日 10:10
  • 153

1032. Sharing (25)

1032. Sharing (25) #include #include using namespace std; class CA { public: enum{N=100000}; ...
  • gk2007310201668
  • gk2007310201668
  • 2013年11月14日 13:25
  • 575

1032. Sharing (25)-PAT

To store English words, one method is to use linked lists and store a word letter by letter. To save...
  • zoushidexing
  • zoushidexing
  • 2013年08月29日 19:35
  • 900

【PAT】1032. Sharing (25)

To store English words, one method is to use linked lists and store a word letter by letter. To save...
  • realxuejin
  • realxuejin
  • 2013年10月30日 17:03
  • 801

PAT 1032. Sharing

题目:http://pat.zju.edu.cn/contests/pat-a-practise/1032 题解: 给两个字符串的链表存储,如果两个字符有相同的后缀,其后缀会存放在相同内存块,问这两个...
  • ACM_Ted
  • ACM_Ted
  • 2014年03月01日 00:10
  • 1228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1032. Sharing (25)
举报原因:
原因补充:

(最多只允许输入30个字)