This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#pra
#define sz(x) (int)x.size()
#define vec vector
#define pb push_back
#define rall(x) x.rbegin(),x.rend()
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define f first
#define s second
using namespace std;
const int N=5e2+3;
typedef unsigned long long ull;
auto rnd=bind(uniform_int_distribution<long long>(1,1e18),mt19937(time(0)));
ull r[N];
int a[N][6];
int k;
int func(const array<int,6> &vc){
int s=0;
for(int i=0;i<k;i++){
int mx=0;
for(int j=0;j<k;j++){
mx=max(mx,a[vc[j]][i]);
}
s+=mx;
}
return s;
};
signed main(){
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
// ifstream cin("input.txt");
int n,c;
cin>>n>>k>>c;
// vec<vec<int>>a(n,vec<int>(k));
vec<vec<int>>p(k,vec<int>(n)),obr(n,vec<int>(k));
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
cin>>a[i][j];
}
// cerr<<i<<endl;
}
for(int i=0;i<k;i++){
auto cmp=[&](int x,int y){
return a[x][i]>a[y][i];
};
iota(all(p[i]),0);
sort(all(p[i]),cmp);
for(int j=0;j<n;j++){
obr[p[i][j]][i]=j;
}
}
priority_queue<pair<int,array<int,6>>>pq;
/// to push;
{
set<int>st;
for(int i=0;i<k;i++) st.insert(p[i][0]);
for(int i=0;i<n;i++){
if(sz(st)<k) st.insert(i);
}
array<int,6>lel;
for(int i=0;i<k;i++){
lel[i]=*st.begin();
st.erase(st.begin());
}
pq.push({func(lel),lel});
}
for(int i=0;i<n;i++) r[i]=rnd();
map<ull,int>mp;
while(!pq.empty()){
auto v=pq.top();pq.pop();
ull hs=0;
for(int i=0;i<k;i++){
hs+=r[v.s[i]];
}
if(mp.count(hs)) continue;
mp[hs]=1;
c--;
// cerr<<v.f<<endl;
if(c==0){
cout<<v.f<<endl;
return 0;
}
auto arr=v.s;
for(int chng=0;chng<k;chng++){
for(int w=0;w<k;w++){
for(int j=0;j<k;j++){
if(obr[arr[w]][j]==n-1) continue;
int nw=p[j][obr[arr[w]][j]+1];
bool ok=1;
for(int t=0;t<k;t++){
if(t!=chng && arr[t]==nw) ok=0;
}
if(ok){
int prv=arr[chng];
arr[chng]=nw;
pq.push({func(arr),arr});
arr[chng]=prv;
}
}
}
}
}
assert(false);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |