Submission #388196

#TimeUsernameProblemLanguageResultExecution timeMemory
388196leakedOlympiads (BOI19_olympiads)C++14
0 / 100
2090 ms262148 KiB
#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 pii pair<int,int> #define f first #define s second using namespace std; const int N=3e2+3; typedef unsigned long long ull; auto rnd=bind(uniform_int_distribution<int>(1,1e9),mt19937(time(0))); ull r[N]; struct buben{ int sum; vec<int>vc; buben(); buben(int _a,vec<int> _vc) : sum(_a),vc(_vc) {} const bool operator<(const buben &o) const{ if(o.sum!=sum) return sum<o.sum; return true; } // int calc(){} }; signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,m,k; cin>>n>>m>>k; /// i suppose it's n*m*k*log vec<vec<int>>a(n,vec<int>(m)); vec<vec<pii>>hah(m); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; hah[j].pb({a[i][j],i}); } } for(int i=0;i<m;i++) sort(rall(hah[i])); auto calc=[&](vec<int> &vc){ int s=0; for(int i=0;i<m;i++){ int mx=0; for(int j=0;j<m;j++) mx=max(mx,a[hah[j][vc[j]].s][i]); s+=mx; } return s; }; priority_queue<buben>pq; map<ull,bool>mp; map<vec<int>,bool>mp2; vec<int>lol(m,0); buben me(0,lol); me.sum=calc(me.vc); pq.push(me); vec<int>used(n,0); int cr=0; for(int i=0;i<n;i++) r[i]=rnd(); while(!pq.empty()){ // cerr<<c.sum<<endl; auto c=pq.top();pq.pop(); // cerr<<c.sum<<endl; if(mp2.count(c.vc)) continue; // cerr<<c.sum<<endl; cr++; mp2[c.vc]=1; ull hs=0; bool ok=1; for(int j=0;j<m;j++) { if(used[hah[j][c.vc[j]].s]!=cr){ hs+=r[hah[j][c.vc[j]].s]; used[hah[j][c.vc[j]].s]=cr; }else ok=0; } if(mp.count(hs)==0){ mp[hs]=1; if(ok){ k--; if(k==0){ cout<<c.sum<<endl; return 0; } } } buben nw=c; for(int i=0;i<m;i++){ nw.sum=c.sum; nw.vc[i]++; if(nw.vc[i]!=n){ nw.sum=calc(nw.vc); pq.push(nw); } nw.vc[i]=c.vc[i]; } // cerr<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...