根据pat甲级1032记录下sort函数的应用,虽然代码没有AC,但是记录下学习过程。
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
whereAddress
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 Next
is 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<algorithm>
#include<iostream>
using namespace std;
struct node
{
int a;
char b;
int c;
};
int cmp(node re1, node re2)
{
return re1.c < re2.c;
}
int main()
{
int x, y, n,m=0,k=0;
node w[500];
cin >> x >> y >> n;
for (int i = 0; i<n; i++)
cin >> w[i].a >> w[i].b >> w[i].c;
sort(w,w+n,cmp);
for (int i = 0; i < n; i++)
{
if (w[i].c == w[i + 1].c)
{
x = w[i].c;
m++;
}
else
;
}
for (y = 0; y<n; y++)
{
if (w[y].a == x)
k = 1;
else
;
}
if (m != 0 && k != 0)
cout << x;
else
cout << -1;
return 0;
}