제출 #352905

#제출 시각아이디문제언어결과실행 시간메모리
352905KerimCarnival Tickets (IOI20_tickets)C++17
100 / 100
925 ms54356 KiB
#include "tickets.h" #include "bits/stdc++.h" #define MAXN 100009 #define INF 1000000007 #define mp(x,y) make_pair(x,y) #define all(v) v.begin(),v.end() #define pb(x) push_back(x) #define wr cout<<"----------------"<<endl; #define ppb() pop_back() #define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++) #define ff first #define ss second #define my_little_dodge 46 #define debug(x) cerr<< #x <<" = "<< x<<endl; using namespace std; typedef long long ll; typedef pair<int,int> PII; template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;} template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;} const int N=1502; int l[N],r[N]; bool cmp(int x,int y){return (l[x]>l[y]);} long long find_maximum(int k,vector<vector<int> > arr) { priority_queue<pair<ll,int> >q;ll res=0; int n=arr.size(),m=arr[0].size();vector<int>ind(n); vector<vector<int>> answer(n,vector<int>(m,-1)); for(int i=0;i<n;i++){ind[i]=i; for(int j=0;j<k;j++)res-=arr[i][j]; q.push(mp(arr[i][l[i]=k-1]+arr[i][r[i]=m-1],i)); } for(int i=0;i<n*k/2;i++){ int ind=q.top().ss;res+=q.top().ff;q.pop();--l[ind];--r[ind]; if(l[ind]>=0)q.push(mp(arr[ind][l[ind]]+arr[ind][r[ind]],ind)); } while(k--){sort(all(ind),cmp); for(int i=0;i<n/2;i++)answer[ind[i]][l[ind[i]]--]=k; for(int i=n/2;i<n;i++)answer[ind[i]][++r[ind[i]]]=k; } 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...