//AC 100' 前后共计不到一小时,还是太慢
//主要是排序那里,排序个数没有统计好,还有运算级的大小
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
int mpnum[30][30];//i->j passengers number
struct Plan
{
int index;
map<int,int>arr;
map<int,int>takeoff;
int res;
}plan[25];
bool cmp(Plan a , Plan b)
{
if(a.res==b.res)
return a.index<b.index;
return a.res<b.res;
}
int main()
{
int n;//city number;
while(scanf("%d",&n)!=EOF && n)
{
memset(mpnum,0,sizeof(mpnum));
for(int i=0;i<25;i++)
{
plan[i].arr.clear();
plan[i].takeoff.clear();
plan[i].index=-1;
plan[i].res=-1;
}
for(int i=1;i<=n;i++)
{
int start;
cin>>start;// start city
int k;
cin>>k;//pair number
for(int i=1;i<=k;i++)
{
int obj;//destination
int num;
cin>>obj>>num;
mpnum[start][obj]=num;
}
}
int planindex;
int cnt=0;
while(scanf("%d",&planindex)!=EOF && planindex)
{
plan[cnt].index = planindex;
for(int i=1;i<=n;i++)
{
int arrcity;
cin>>arrcity;
plan[cnt].arr[arrcity]=i;
}
for(int i=1;i<=n;i++)
{
int desti;
cin>>desti;
plan[cnt].takeoff[desti]=i;
}
int tempres=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mpnum[i][j])//exist passengers
{
//tempres = tempres+ (1+ abs(plan[planindex].arr[i]-plan[planindex].takeoff[j])*mpnum[i][j]);
int absindex=abs(plan[cnt].arr[i]-plan[cnt].takeoff[j]);
// cout<<absindex<<" ";
int curp= (absindex+1)*mpnum[i][j];
// cout<<curp<<" ";
tempres+=curp;
// cout<<tempres<<endl;
//cout<<"i:"<<i<<" j:"<<j<<" mpnum"<<mpnum[i][j]<<" "<<tempres<<endl;
}
}
}
plan[cnt].res = tempres;
cnt++;
//cout<<"planindex"<<planindex<<endl;
}
// for(int i=0;i<n;i++)
// cout<<plan[i].index<<" "<<plan[i].res<<endl;
sort(plan,plan+cnt,cmp);
cout<<"Configuration Load"<<endl;
for(int i=0;i<cnt;i++)
{
// if(plan[i].res!=-1 && plan[i].index!=-1)
printf("%-4d%-9d\n",plan[i].index,plan[i].res);
}
}
return 0;
}
大模拟嗯