Submission #1142890

#TimeUsernameProblemLanguageResultExecution timeMemory
1142890PagodePaivaCarnival Tickets (IOI20_tickets)C++20
27 / 100
328 ms89920 KiB
#include<bits/stdc++.h> #include "tickets.h" #include <vector> using namespace std; const int N = 1510; const long long inf = 1e18; int ans[N][N]; long long l[N], r[N]; int idxl[N], idxr[N]; long long dp[N][N]; long long cnt[N]; set <int> linhas; long long best[N][N]; long long find_maximum(int k, std::vector<std::vector<int>> x) { memset(ans, -1, sizeof ans); int at = 0; long long res = 0; int n = x.size(); int m = x[0].size(); while(k > 0){ vector <array <long long, 3>> valores; for(int i = 0;i < n;i++){ int j = 0; while(ans[i][j] != -1) j++; l[i] = x[i][j]; idxl[i] = j; j = m-1; while(ans[i][j] != -1) j--; r[i] = x[i][j]; idxr[i] = j; valores.push_back({l[i], i, 0}); valores.push_back({r[i], i, 1}); linhas.insert(i); } sort(valores.begin(),valores.end()); int qtdmin = n/2; memset(cnt, 0, sizeof cnt); for(int i = 0;i < n;i++){ cnt[valores[i][1]]++; if(cnt[valores[i][1]] == 2){ ans[valores[i][1]][idxl[valores[i][1]]] = at; res -= l[valores[i][1]]; linhas.erase(valores[i][1]); qtdmin--; } } for(int i = 0;i < n;i++){ if(cnt[i] == 0){ ans[i][idxr[i]] = at; linhas.erase(i); res += r[i]; } } int con = 1; dp[0][0] = 0; for(int i = 1;i <= qtdmin;i++){ dp[0][i] = -inf; } for(auto x : linhas){ for(int i = 0;i <= qtdmin;i++){ dp[con][i] = dp[con-1][i]+r[x]; best[con][i] = i; if(i > 0) if(dp[con][i] < dp[con-1][i-1]-l[x]){ dp[con][i] = dp[con-1][i-1]-l[x]; best[con][i] = i-1; } } con++; } con--; res += dp[con][qtdmin]; while(con > 0){ auto it = linhas.end(); it--; linhas.erase(it); int x = *it; if(best[con][qtdmin]-qtdmin == 0){ ans[x][idxr[x]] = at; } else{ ans[x][idxl[x]] = at; qtdmin--; } con--; } at++; k--; } vector <vector <int>> answer; for(int i = 0;i < n;i++){ vector <int> aux; for(int j = 0;j < m;j++){ aux.push_back(ans[i][j]); } answer.push_back(aux); } allocate_tickets(answer); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...