题目描述
第二题:特征运动
c++代码
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() {
int n,m,w;
cin>>n;
while(n--){
cin>>m;
int maxNum=0; //最大特征运动长度
vector< list< pair<int,int> > > myvector; //一个测试用例
while(m--){
cin>>w;
list< pair<int,int> > mylist; //一帧
while(w--){
int a,b;
cin>>a>>b;
mylist.push_back(pair<int,int>(a,b));
}
if(w==0)
mylist.push_back(pair<int,int>(-1,-1)); //特征个数为0,特征值记为-1
myvector.push_back(mylist);
}
for(vector< list< pair<int,int> > >::iterator i=myvector.begin();i!=myvector.end();i++){ //遍历每一帧
for(list< pair<int,int> >::iterator j=(*i).begin();j!=(*i).end();j++){ //遍历每一特征
int num=1; //当前特征运动长度
for(vector< list< pair<int,int> > >::iterator k=i+1;k!=myvector.end();k++){ //计算当前特征长度
bool isgap=true; //是否间断
for(list< pair<int,int> >::iterator e=(*k).begin();e!=(*k).end();e++){
if((*e).first==(*j).first&&(*e).second==(*j).second){
num++;
(*k).erase(e); //删除这个查找成功的特征,避免后续遍历重复查找
isgap=false;
break;
}
}
if(isgap) //出现间断,达到当前特征最大运动长度
break;
}
if(num>maxNum) //更新最大运动长度
maxNum=num;
}
}
cout<<maxNum<<endl;
}
return 0;
}