1161 Merging Linked Lists

判断条件导致错误原因

		for(int i=0;i<vec2.size();++i)
		{
			tmp.eb(vec2[i]);
			if(i&1 and cur<l1)tmp.eb(vec1[cur++]);
		}	

这里面如果写成

		for(int i=0;i<vec2.size();++i)
		{
			if(i%2==0 and i>0 and cur<l1)tmp.eb(vec1[cur++]);
			tmp.eb(vec2[i]);
		}	

在刚好长的是短的二倍的时候最后的序列会少一个短的值,因为长的值最后使用的下标是一个奇数

AC

#include <bits/stdc++.h>
#define int long long
#define eb emplace_back
#define pii  pair<int,int>
#define endl "\n"
using namespace std;
using ll=long long;
const ll mod=1e9+7;
const int N=1e5+10;
int k,n,m;
int be1,be2;
int l1,l2;
vector<int>vec1;
vector<int>vec2;
struct node
{
	int nxt,data;
}nds[N];

void solve()
{
	cin>>be1>>be2>>m;
	for(int i=1;i<=m;++i)
	{
		int cur,nxt,data;
		cin>>cur>>data>>nxt;
		nds[cur].nxt=nxt;
		nds[cur].data=data;
	}
	for(int cur=be1;cur!=-1;cur=nds[cur].nxt)
	{
		vec1.eb(cur);
		l1++;
	}
	for(int cur=be2;cur!=-1;cur=nds[cur].nxt)
	{
		vec2.eb(cur);
		l2++;
	}
	vector<int>tmp;
	int cur=0;
	if(l1>l2)
	{
		reverse(vec2.begin(),vec2.end());
		for(int i=0;i<vec1.size();++i)
		{
			tmp.eb(vec1[i]);
			if(i&1 and cur<l2)tmp.eb(vec2[cur++]);
		}
	}
	else
	{
		reverse(vec1.begin(),vec1.end());
		for(int i=0;i<vec2.size();++i)
		{
			tmp.eb(vec2[i]);
			if(i&1 and cur<l1)tmp.eb(vec1[cur++]);
		}	
	}
//	for(int i=0;i<tmp.size();++i)cout<<tmp[i]<<"**\n";
	printf("%05d %d ",tmp[0],nds[tmp[0]].data);
	for(int i=1;i<tmp.size();++i)
	{
		printf("%05d\n%05d %d ",tmp[i],tmp[i],nds[tmp[i]].data);
	}
	printf("-1");
}
//int main()
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int T=1;
	while(T--)
	{
		solve(); 
	}
	return 0;
}
/*
*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值