Submission #803055

#TimeUsernameProblemLanguageResultExecution timeMemory
803055Edu175Carnival Tickets (IOI20_tickets)C++17
11 / 100
3 ms6740 KiB
#include "tickets.h" #include <bits/stdc++.h> #define pb push_back #define fst first #define snd second #define fore(i,a,b) for(ll i=a,ioi=b;i<ioi;i++) #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define mset(a,v) memset((a),(v),sizeof(a)) #define imp(v) for(auto dfh:v)cout<<dfh<<" ";cout<<"\n" using namespace std; typedef long long ll; typedef pair<ll,ll> ii; const ll MAXN=1505; ll a[MAXN][MAXN]; vector<vector<int>> us; // i,j used in round us[i][j] ll n,m,k; ll c[MAXN][2]; set<ll>pos[MAXN]; void useij(ll i, ll j, ll idx){ us[i][j]=idx; pos[i].erase(j); c[i][a[i][j]]--; } /*void use(ll i, ll x, ll idx){ //from row i use element = to x in oper idx fore(j,0,m){ if(us[i][j]==-1&&a[i][j]==x){ us[i][j]=idx; pos[i].erase(j); return; } } assert(0); }*/ /*void use_all(ll x, ll idx){ //if can use x in every row vector<ll>op; fore(i,0,n){ for(auto j:pos){ if(!c[i][x]){ op.pb(j); break; } else { if(a[i][j]==x){ op.pb(j); break; } } } } fore(i,0,SZ(op))useij(i,op[i],idx); }*/ long long find_maximum(int K, std::vector<std::vector<int>> A){ k=K; n=SZ(A); m=SZ(A[0]); fore(i,0,n)fore(j,0,m)a[i][j]=A[i][j]; us.resize(n,vector<int>(m,-1)); if(m==1){ //sub m=1 vector<ll>b; fore(i,0,n)b.pb(a[i][0]),us[i][0]=0; sort(ALL(b)); ll sum=0; fore(i,0,n)sum+=abs(b[i]-b[n/2]); allocate_tickets(us); return sum; } //ll is_sub=1; //fore(i,0,n)fore(j,0,m)if(a[i][j]>1)is_sub=0; fore(i,0,n)fore(j,0,m)c[i][a[i][j]]++; fore(i,0,n)fore(j,0,m)pos[i].insert(j); ll res=0; fore(idx,0,k){ vector<ll>q(2); fore(i,0,n){ if(!c[i][0])q[1]++; if(!c[i][1])q[0]++; } vector<ll>u(2); if(q[0]>=n/2)u[0]=0,u[1]=n-q[0]-q[1]; else if(q[1]>=n/2)u[1]=0,u[0]=n-q[0]-q[1]; else u[0]=n/2-q[0],u[1]=n/2-q[1]; res+=min(q[0]+u[0],q[1]+u[1]); fore(i,0,n){ if(!c[i][0])useij(i,*pos[i].begin(),idx); else if(!c[i][1])useij(i,*pos[i].begin(),idx); else { for(auto j:pos[i])if(u[a[i][j]]){ useij(i,j,idx),u[a[i][j]]--; break; } } } } allocate_tickets(us); 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...