您的位置:首页 > 其它

PAT 1032. Sharing (25)

2015-03-14 11:32 471 查看
//

/* 方法一 accepted

使用flag的方法,第一次遍历第一个链表,标记经过的flag为true;再遍历第二个链表,如果有flag已经为true则表示为所求的结果。

*/

/* 方法二:第五个case错误,23分。

后面注释的代码是直接将所有的next都保存到一个数组里面,进行查找出现两次的数据,即为重复出现的结果。

但是这种方法,不能够排除无效的节点,所以导致倒数第二个case不正确。

注意lower_bound, find, binary_search的使用方法。

*/

#include <iostream>

using namespace std;

int List[1000005];

bool flag[1000005] = {false};

int result = -1;

int main()

{

int Start1, Start2, N;

scanf("%d %d %d", &Start1, &Start2, &N);

fill(List, List+1000005, -1);

while(N--)

{

int t1, t2;

char c;

cin >> t1 >> c >> t2;

List[t1] = t2;

}

int t = Start1;

while(t!=-1)

{

flag[t] = true;

t = List[t];

}

t = Start2;

while(t!=-1)

{

if (flag[t] == true)

{

result = t;

break;

}

flag[t] = true;

t = List[t];

}

if (result == -1)

{

cout << "-1";

}

else

printf("%05d", result);

return 0;

}

//#include<iostream>

//#include <vector>

//#include <algorithm>

//using namespace std;

//

//int result = -1;

//

//int WordStart1, WordStart2;

//

//bool cmp(int t, int k)

//{

// if (t == k)

// {

// result = t;

// }

// return t < k;

//}

//int main()

//{

// int N;

// scanf("%d %d %d", &WordStart1, &WordStart2, &N);

// int tmp;

// char c;

// int ne;

// int i;

// vector<int> next;

// for (i = 0;i<N;i++)

// {

// scanf("%d %c %d", &tmp, &c, &ne);

// next.push_back(ne);

// }

// sort(next.begin(), next.end(), cmp);

//

// if(result != -1)

// {

// printf("%05d", result);

// }

// else

// cout << "-1";

//

// return 0;

//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: