Submission #1104410

#TimeUsernameProblemLanguageResultExecution timeMemory
1104410alexddOlympiads (BOI19_olympiads)C++17
44 / 100
1464 ms262144 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") using namespace std; const int MOD = 1e9+9; int n,k,c; int a[505][7]; int p[505]; struct config { int sumval; int hsh; int alesi[7]; void schimba(int poz, int newv) { hsh = (hsh + MOD - p[alesi[poz]])%MOD; alesi[poz] = newv; hsh = (hsh + p[alesi[poz]])%MOD; sumval=0; for(int i=1;i<=k;i++) { int val=0; for(int j:alesi) val = max(val, a[j][i]); sumval += val; } } bool is_ales(int x) { for(int i:alesi) if(i==x) return 1; return 0; } }; bool operator<(config x, config y) { if(x.sumval < y.sumval) return 1; if(x.sumval > y.sumval) return 0; return x.hsh < y.hsh; } bool ales[505]; config init; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>k>>c; for(int i=1;i<=n;i++) { for(int j=1;j<=k;j++) { cin>>a[i][j]; } } assert(k<=n); p[0]=1; p[1]=997; for(int i=2;i<=n;i++) p[i] = 1LL*p[i-1]*p[1]%MOD; for(int i=1;i<=k;i++) { int mxm=-1,unde=-1; for(int j=1;j<=n;j++) { if(!ales[j] && a[j][i]>mxm) { mxm = a[j][i]; unde = j; } } assert(unde!=-1); ales[unde] = 1; init.schimba(i-1,unde); } priority_queue<config> pq; unordered_map<int,int> inq; pq.push(init); inq[init.hsh]=1; int cnt=0; while(!pq.empty()) { config aux = pq.top(); pq.pop(); cnt++; if(cnt==c) { cout<<aux.sumval; return 0; } for(int s=0;s<k;s++) { int vechi = aux.alesi[s]; for(int i=1;i<=n;i++) { if(!aux.is_ales(i)) { aux.schimba(s,i); if(aux.sumval <= aux.sumval && !inq[aux.hsh]) { pq.push(aux); inq[aux.hsh]=1; } } } aux.schimba(s,vechi); } } assert(0==1); return 0; } /* 5 4 4 7 0 4 9 3 0 8 4 1 1 3 7 5 1 3 4 4 2 2 9 */

Compilation message (stderr)

olympiads.cpp: In function 'int main()':
olympiads.cpp:99:35: warning: self-comparison always evaluates to true [-Wtautological-compare]
   99 |                     if(aux.sumval <= aux.sumval && !inq[aux.hsh])
      |                        ~~~~~~~~~~ ^~ ~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...