1032. Sharing 解析

有几个特殊情况:

1、开头就相同

2、不是以-1结尾

考虑到这两个就应该oK了。。

#include <iostream>
#include <string>
#include <vector>

#define MAX 100010

using namespace std;

struct Node {
	char c;
	int next;
};

Node str[MAX];

int main() {
	int p1, p2, N;
	cin >> p1 >> p2 >> N;
	int len1 = 0, len2 = 0;


	if (p1 == p2) {
		printf("%05d\n", p1);
		return 0;
	}

	int Add; 
	for (int i = 0; i < N;i++) {
		scanf("%d", &Add); cin.get();
		scanf("%c %d", &str[Add].c, &str[Add].next);
	}

	int p = p1;

	while (p != -1) {
#ifdef _DEBUG
		printf("%05d %c %05d\n", p, str[p].c, str[p].next);
#endif
		p = str[p].next;
		len1++;
	}

	p = p2;
	while (p != -1) {
#ifdef _DEBUG
		printf("%05d %c %05d\n", p, str[p].c, str[p].next);
#endif
		p = str[p].next;
		len2++;
	}

	int i = p1,j = p2;
	int gap;
	if (len1 < len2) {
		gap = len2 - len1;
		while (gap) {
			j = str[j].next;
			gap--;
		}
	}
	else {
		gap = len1 - len2;
		while (gap) {
			i = str[i].next;
			gap--;
		}
	}


	bool tag = false;
	while (i != -1 && j != -1) {
		if (str[i].next == str[j].next) {
			if (str[j].next == -1)
				cout << "-1" << endl;
			else
				printf("%05d\n", str[i].next);
			tag = true;
			break;
		}
		else {
			i = str[i].next;
			j = str[j].next;
		}
	}

	if (!tag)
		cout << "-1" << endl;
	

	system("pause");

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值