제출 #1239559

#제출 시각아이디문제언어결과실행 시간메모리
1239559Muhammad_Aneeq카니발 티켓 (IOI20_tickets)C++17
27 / 100
371 ms51452 KiB
#include "tickets.h" #include <vector> #include <queue> #include <iostream> using namespace std; #define ll long long int const N=1510; long long dp[N]={}; ll mul(ll a,ll b) { return a*b; } long long find_maximum(int k, vector<vector<int>> a) { int n = a.size(); int m = a[0].size(); long long ans=0; int l[n],r[n]; int pos[n]={}; for (int i=0;i<n;i++) l[i]=0,r[i]=m-1; priority_queue<pair<ll,ll>>pq; vector<vector<int>>ret(n,vector<int>(m,-1)); int sz=n/2; for (int index=0;index<k;index++) { ll sm=0; for (int i=0;i<n;i++) sm+=a[i][r[i]]; ll temp=ans; ans=0; for (int i=0;i<n;i++) { pq={}; sm-=a[i][r[i]]; ll cur=0; for (int j=0;j<n;j++) { if (j==i) continue; pq.push({a[j][l[j]]+a[j][r[j]],j}); cur+=a[j][l[j]]+a[j][r[j]]; if (pq.size()>=sz) { cur-=pq.top().first; pq.pop(); } } int ind=-1; for (int j:{l[i],r[i]}) { ll an=sm-mul(a[i][j],n-1)-(cur-mul(2,mul(sz-1,a[i][j]))); if (an>ans) { ans=an; ind=j; } } if (ind!=-1) { for (int j=0;j<n;j++) { pos[j]=1; } if (l[i]==ind) pos[i]=0; else pos[i]=1; while (pq.size()) { pos[pq.top().second]=0; pq.pop(); } } sm+=a[i][r[i]]; } ans=temp+ans; for (int j=0;j<n;j++) { if (pos[j]) { ret[j][r[j]]=index; r[j]--; } else { ret[j][l[j]]=index; l[j]++; } } } allocate_tickets(ret); return ans; }
#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...