和上题类似,考虑随一个序列贪心。

因为没有多测,为保证正确性,考虑卡时。

然后就没什么难的了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<bits/stdc++.h>
using namespace std;
int n,a[25][25],b[1005],g[25][25],ans=2e9;
mt19937 rd((unsigned long long)new char);
int main(){
cin>>n;
for(int i=1;i<=n;++i)
for(int j=1;j<=3;++j){int x;cin>>x;a[i][x]=1;}
for(int i=1;i<=n;++i)b[i]=i;
while(1.0*clock()/CLOCKS_PER_SEC<=0.985){
shuffle(b+1,b+n+1,rd);
int cnt=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(a[b[i]][b[j]])cnt+=abs(i-j);
ans=min(ans,cnt/2);
}
cout<<ans<<'\n';
return 0;
}