出现两个循环的时候一定要注意区分最内的判定条件的i,j!!!!!!!!!!!!!
#include<cstdio>
#include<iostream>
#include <algorithm>
#include<cstring>
#include<sstream>
#include <cmath>
#include <set>
#include<map>
#include <vector>
#define ll long long
using namespace std;
const int N = 1e4+5;
typedef struct
{
int sex,r,v=0;
string nm,p;
}node;
node a[N],g[N],b[N],aa[N];
bool cmp(node a,node b)
{
return a.r < b.r;
}
bool cmp_b(node a,node b)
{
return a.r > b.r;
}
int main()
{
int n,t=0,tt=0;
cin>>n;
for(int i =0;i < n;i++)
{
cin>>a[i].sex>>a[i].nm;
a[i].r = i;
if(a[i].sex == 0)
g[t++] = a[i];
else
b[tt++] = a[i];
}
sort(g,g+t,cmp);
sort(b,b+tt,cmp_b);
for(int i= 0;i < t;i++)
{
g[i].p = b[i].nm;
b[i].p = g[i].nm;
}
for(int i = 0;i < t;i++)
aa[i] = g[i];
for(int i = t;i < n;i++)
aa[i] = b[i-t];
sort(aa,aa+n,cmp);
for(int i = 0;i < n;i++)
{
if(aa[i].v == 0)
cout<<aa[i].nm<<" "<<aa[i].p<<endl;;
for(int j= 0;j < n;j++)
{
if(aa[i].nm == aa[j].p)
{
aa[j].v = 1;
}
}
}
return 0;
}