题目:
题解:
本题直接用list模拟就完事了。
本人对list不是很熟练导致re两发。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
list<int>l;
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int k;
scanf("%d",&k);
l.push_back(k);
}
for(int i=2;i<=n;i++)
{
scanf("%d",&m);
list<int>::iterator it=l.begin();
for(int i=1;i<=m;i++)
{
int k;
scanf("%d",&k);
if(it==l.end())continue;
while(k>(*it))
{
//cout<<*it<<"---"<<k<<endl;
it=l.erase(it);//注意,使用erase函数时,迭代器it会自动退后一格。
if(it==l.end())break;//在一行本来漏掉了导致re.
}
if(k==(*it))
{
//cout<<*it<<" ";
it++;
//cout<<*it<<endl;
}
}
while(it!=l.end())
{
it=l.erase(it);
}
}
list<int>::iterator it=l.begin();
for(it=l.begin();it!=l.end();it++)
{
if(it==l.begin()) printf("%d",*it);
else printf(" %d",*it);
}
printf("\n");
}
}