#include <cstdio>
#include <cstring>
#include <list>
#include <iterator>
#include <algorithm>
#include <iostream>
using namespace std;
class N
{
public:
int data;
bool in;
N()
{
data = -1;
in = false;
}
};
list<N> s;
list<N>::iterator it;
int main()
{
int n, m, k;
N temp;
while(scanf("%d%d", &n, &m) != EOF)
{
s.clear();
for(int i = 0; i < n; i++)
{
if(i == 0)
{
for(int j = 0; j < m; j++)
{
scanf("%d", &k);
temp.data = k;
temp.in = false;
s.push_back(temp);
}
}
else
{
int p = 0;
int *x = new int[m];
for(int j = 0; j < m; j++)
scanf("%d", &x[j]);
for(it = s.begin(); it != s.end(); it++)
{
for(int j = p; j < m; j++)
{
if(x[j] == (*it).data)
{
(*it).in = true;
p = j+1;
break;
}
}
}
for(it = s.begin(); it != s.end(); it++)
{
if((*it).in)
{
(*it).in = false;
}
else
{
s.erase(it);
}
}
}
}
printf("%d\n", s.size());
}
return 0;
}
使用动态规划即可解决