제출 #1142881

#제출 시각아이디문제언어결과실행 시간메모리
1142881PagodePaivaCarnival Tickets (IOI20_tickets)C++20
11 / 100
6 ms9800 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]; int l[N], r[N]; long long dp[N][N]; int cnt[N]; set <int> linhas; int best[N][N]; long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); vector <array <int, 3>> valores; for(int i = 0;i < n;i++){ l[i] = x[i][0]; r[i] = x[i][m-1]; valores.push_back({l[i], i, 0}); valores.push_back({r[i], i, 1}); linhas.insert(i); } sort(valores.begin(),valores.end()); memset(ans, -1, sizeof ans); int qtdmin = n/2; long long res = 0; for(int i = 0;i < n;i++){ cnt[valores[i][1]]++; if(cnt[valores[i][1]] == 2){ ans[valores[i][1]][0] = 0; res -= l[valores[i][1]]; linhas.erase(valores[i][1]); qtdmin--; } } for(int i = 0;i < n;i++){ if(cnt[i] == 0){ ans[i][m-1] = 0; 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++; } res += dp[con-1][qtdmin]; while(con > 1){ auto it = linhas.end(); it--; linhas.erase(it); int x = *it; if(best[con][qtdmin]-qtdmin == 0){ ans[x][m-1] = 0; } else{ ans[x][0] = 0; qtdmin--; } con--; } 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...