题目传送门
测试点3,空串匹配,测试数据如,
11 22 2
11 a -1
22 -1 //注意这里,22地址中的字符为 空格——' '
正确结果为: -1
错误结果为:什么都没有
测试点5 不仅单元中的元素同,单元中的地址也要同。
AC代码如下,
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1000005;
struct Node{
int address;
char data;
int next;
int order;
}n1[N],n2[N],node[N];
int cmp(Node x, Node y){
return x.order < y.order;
}
int main(){
for(int i=0;i<N;i++){
n2[i].order = N; n1[i].order = N;
node[i].address = N;
}
int a1,a2,n,address;
scanf("%d %d %d",&a1, &a2, &n);
for(int i=0;i<n;i++){
scanf("%d ",&address);
node[address].data = getchar();
scanf("%d",&node[address].next);
node[address].address = address;
//printf("\n%d %c %d\n",node[address].address, node[address].data,node[address].next );
}
int i=0,j=0,order=0,l1=0,l2=0;
//printf("%d",i);
while(1){
if(node[a1].address == N) break;
n1[i].order = order++;
n1[i].address = node[a1].address;
n1[i].data = node[a1].data;
n1[i].next = node[a1].next;
a1 = n1[i].next;
if(n1[i].next == -1) break;
i++;
}
if(i==0) l1=0;
else
l1 = i+1;
order=0;
for( i=0;;i++){
if(node[a2].address == N) break;
n2[i].order = order++;
n2[i].address = node[a2].address;
n2[i].data = node[a2].data;
n2[i].next = node[a2].next;
a2 = n2[i].next;
if(n2[i].next == -1) break;
}
if(i==0) l2=0;
else
l2 = i+1;
sort(n1,n1+l1,cmp);
sort(n2, n2+l2,cmp);
int f = 0,same=0;
if(l1==0 || l2==0){f=0;}
else{
for( i=l1-1,j=l2-1; i>=0 &&j>=0 ;i--,j--){
if(n1[i].data == n2[j].data && n1[i].address == n2[j].address) {
same = n1[i].address;
f=1;
continue;
}
else break;
}}
if(f==0) printf("-1\n");
else printf("%05d\n",same);
return 0;
}