没用结构体(
#include<bits/stdc++.h>
using namespace std;
int seq[410];
int tim[25][25];
int mach[25][25];
int attr[25][8100];
int cnt[25];int n,m;
int found(int ma,int go)
{
int ret;
for(ret=8080;attr[ma][ret]!=go and ret>0;--ret);
return ret;
}
vector<pair<int,int> >query(int mac,int st)
{
vector<pair<int,int> >ret;
for(int i=st;i<=8080;)
if(!attr[mac][i])
{
int j=i;
while(!attr[mac][j] and j<=8080)++j;
ret.push_back(make_pair(i,j));i=j+1;
}
else++i;
return ret;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>m>>n;
for(int i=1;i<=m*n;++i)
cin>>seq[i];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>mach[i][j];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>tim[i][j];
for(int i=1;i<=m*n;++i)
{
++cnt[seq[i]];
int last=mach[seq[i]][cnt[seq[i]]-1];
int lstime;if(cnt[seq[i]]==1)lstime=0;
else lstime=found(last,seq[i]);
vector<pair<int,int> >seg=query(mach[seq[i]][cnt[seq[i]]],lstime+1);
for(int j=0;j<seg.size();++j)
{
if(seg[j].second-seg[j].first+1>=tim[seq[i]][cnt[seq[i]]])
{
for(int k=1;k<=tim[seq[i]][cnt[seq[i]]];++k)
attr[mach[seq[i]][cnt[seq[i]]]][seg[j].first+k-1]=seq[i];
break;
}
}
}
for(int time=8080;time>0;--time)
{
for(int i=1;i<=m;++i)
if(attr[i][time])
{cout<<time;return 0;}
}
return 0;
}