好像有点复杂(时间复杂度谁帮忙算算...)
#include<bits/stdc++.h>
using namespace std;
struct mod{
int t[21],m[21],a=1;
};
struct mac{
int d=0;
};
int n,k,p[401][2],sec,pn,pb;
mod id[21];
mac mid[21];
int c[21];
void make(){
for(int i=1;i<=pn;i++){
if(mid[id[p[i][0]].m[p[i][1]]].d==0&&p[i][1]==id[p[i][0]].a){
mid[id[p[i][0]].m[p[i][1]]].d=p[i][0];
}
}for(int i=1;i<=n;i++){
if(mid[i].d){
id[mid[i].d].t[id[mid[i].d].a]--;
if(id[mid[i].d].t[id[mid[i].d].a]==0){
id[mid[i].d].a++;
mid[i].d=0;
}
}
}for(int i=1;i<=pn;i++){
if(id[p[i][0]].a>=p[i][1]){
for(int j=i;j<pn;j++){
p[i][0]=p[i+1][0];
p[i][1]=p[i+1][1];
}p[pn][0]=p[pn][1]=0;pn--;
}
}
}
int main(){
cin>>n>>k;
pn=n*k;
for(int i=1;i<=n*k;i++){
cin>>p[i][0];
c[p[i][0]]++;
p[i][1]=c[p[i][0]]+1;
}for(int i=1;i<=k;i++){
for(int j=1;j<=n;j++){
cin>>id[i].m[j];
}
}for(int i=1;i<=k;i++){
for(int j=1;j<=n;j++){
cin>>id[i].t[j];
}
}while(pn){
make();
sec++;
}cout<<sec;
return 0;
}
求助啊。。。