#include <bits/stdc++.h>
#include "tickets.h"
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=1550;
int a[N][N];
vector<vector<int>>s;
int n,m;
ll izracunaj(vector<int>a){
sort(a.begin(),a.end());
//for(auto i:a) printf("%i ",i);printf("\n");
ll sum1=0;for(auto i:a) sum1+=i;
ll res=1e18,n=a.size();
for(ll i=0,sum=0;i<n;i++){
ll x=sum1-2*sum+a[i]*(2*i-n);
//printf("%lld\n",x);
res=min(res,x);
sum+=a[i];
}
return res;
}
ll Izracunaj(){
int maks=0;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) maks=max(maks,s[i][j]);
vector<int>vrednosti[maks+1];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(s[i][j]!=-1) vrednosti[s[i][j]].pb(a[i][j]);
}
}
ll res=0;for(int i=0;i<=maks;i++) if(!vrednosti[i].empty()) res+=izracunaj(vrednosti[i]);
return res;
}
long long find_maximum(int k, std::vector<std::vector<int>> a1){
n=a1.size(),m=a1[0].size();
for(int i=0;i<n;i++) for(int j=0;j<m;j++) a[i][j]=a1[i][j];
for(int i=0;i<n;i++){
vector<int>temp;
for(int j=0;j<m;j++) temp.pb(-1);
s.pb(temp);
}
/*vector<array<int,3>>nesto;
for(int i=0;i<n;i++){
int maks=0,ind=-1;
for(int j=0;j<m;j++){
if(a[i][j]>maks) maks=a[i][j],ind=j;
}
nesto.pb({maks,i,ind});
}
sort(nesto.begin(),nesto.end());
for(int i=n-1;i>=n/2;i--) s[nesto[i][1]][nesto[i][2]]=0;
for(int I=0;I<n/2;I++){
int i=nesto[I][1];
int mn=1e9,ind=-1;
for(int j=0;j<m;j++){
if(mn>a[i][j]) mn=a[i][j],ind=j;
}
s[i][ind]=0;
}
ll x=Izracunaj();vector<vector<int>>s1=s;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) s[i][j]=-1;
nesto.clear();
for(int i=0;i<n;i++){
int mn=1e9,ind=-1;
for(int j=0;j<m;j++){
if(a[i][j]<mn) mn=a[i][j],ind=j;
}
nesto.pb({mn,i,ind});
}
sort(nesto.begin(),nesto.end());
for(int i=0;i<n/2;i++) s[nesto[i][1]][nesto[i][2]]=0;
for(int I=n/2;I<n;I++){
int i=nesto[I][1];
int maks=0,ind=-1;
for(int j=0;j<m;j++){
if(maks<a[i][j]) maks=a[i][j],ind=j;
}
s[i][ind]=0;
}
if(Izracunaj()<x) s=s1;*/
/*bool izbrisan[n+10]={false};
while(1){
int d=0,maks=0,ind0=-1,mn=1e9,ind1=-1;
pair<int,int>ubaci={-1,-1};
for(int i=0;i<n;i++){
if(izbrisan[i]) continue;
if(a[i][m-1]-mn>d){
d=a[i][m-1]-mn;
ubaci={ind1,i};
}
if(maks-a[i][0]>d){
d=maks-a[i][0];
ubaci={i,ind0};
}
if(maks<a[i][m-1]) maks=a[i][m-1],ind0=i;
if(mn>a[i][0]) mn=a[i][0],ind1=i;
}
if(ubaci.fi==-1) break;
s[ubaci.fi][0]=0;
s[ubaci.se][m-1]=0;
izbrisan[ubaci.fi]=izbrisan[ubaci.se]=true;
}*/
int num[n+10][2],ind[n+10][2];
memset(num,0,sizeof(num));
memset(ind,0,sizeof(ind));
for(int i=0;i<n;i++) ind[i][0]=0,ind[i][1]=m-1;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) num[i][a[i][j]]++;
set<pair<int,int>>st[2];
for(int i=0;i<n;i++) st[0].insert({num[i][0],i}),st[1].insert({num[i][1],i});
for(int c=0;c<k;c++){
int ct=n;bool was[n+10]={false};
while(ct){
if(st[0].size()&&st[1].size()){
pair<int,int>x=*st[1].rbegin();st[1].erase(x);
while(was[x.se]) x=*st[1].rbegin(),st[1].erase(x);
num[x.se][1]--;
s[x.se][ind[x.se][1]--]=c;
was[x.se]=true;
x=*st[0].rbegin();st[0].erase(x);
while(was[x.se]) x=*st[0].rbegin(),st[0].erase(x);
num[x.se][0]--;
s[x.se][ind[x.se][0]++]=c;
was[x.se]=true;
ct-=2;
}
else if(st[0].empty()){
pair<int,int>x=*st[1].rbegin();st[1].erase(x);
while(was[x.se]) x=*st[1].rbegin(),st[1].erase(x);
num[x.se][1]--;
s[x.se][ind[x.se][1]--]=c;
was[x.se]=true;
ct--;
}
else{
pair<int,int>x=*st[0].rbegin();st[0].erase(x);
while(was[x.se]) x=*st[0].rbegin(),st[0].erase(x);
num[x.se][0]--;
s[x.se][ind[x.se][0]++]=c;
was[x.se]=true;
ct--;
}
}
st[0].clear(),st[1].clear();
for(int i=0;i<n;i++) st[0].insert({num[i][0],i}),st[1].insert({num[i][1],i});
}
allocate_tickets(s);
return Izracunaj();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |