判断条件导致错误原因
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;
}
/*
*/