int l = 1, r = n;
while(v[r].cnt == 0) r--;
while(l < r)
{
if(v[1].cnt == 1)break;
cout<<v[r].id<<' '<<v[l].id<<'\n';
v[r].cnt--, v[l].cnt--;
l++;
if(v[l].cnt <= v[1].cnt && v[1].cnt) l = 1;
if(!v[r].cnt) r--;
if(l == r && v[l].cnt)swap(v[l], v[1]), l = 1;
}
if(v[1].cnt)
{
for(int i = 2; i <= n; i++)
if(v[i].cnt)
{
cout<<v[i].id<<' '<<v[i-1].id<<"\n";
v[i].cnt--, v[i-1].cnt--;
}
}
这一段为什么是正确的?