제출 #258325

#제출 시각아이디문제언어결과실행 시간메모리
258325eohomegrownapps로봇 (IOI13_robots)C++14
90 / 100
3085 ms19064 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll w,h; //map<ll,int> grid; int indices[1000000]; ll dp[2][50001]; ll m = 1e9; int *xc, *yc; int n; bool success(ll mid){ for (int y = 0; y<2; y++){ for (int x = 0; x<50001; x++){ dp[y][x]=0; } } for (ll i = w-1; i>=0; i--){ dp[0][i]=mid*(w-1-i); } bool c = 1; int cnt = 0; for (ll y = h-1; y>=0; y--){ dp[c][w]=mid*(h-1-y); for (ll x = w-1; x>=0; x--){ dp[c][x]=dp[c][x+1]+dp[!c][x]-dp[!c][x+1];//-grid[x*m+y]; while (cnt<n&&xc[indices[cnt]]==x&&yc[indices[cnt]]==y){ dp[c][x]--; cnt++; } if (dp[c][x]<0){ return false; } } c=!c; } return true; } bool comp(int a, int b){ if (yc[a]==yc[b]){ return xc[a]>xc[b]; } else { return yc[a]>yc[b]; } } int putaway(int lx, int ly, int N, int xpos[], int ypos[], int xtoys[], int ytoys[]) { n=N; sort(xpos,xpos+lx); sort(ypos,ypos+ly); for (ll i = 0; i<n; i++){ xtoys[i]=upper_bound(xpos,xpos+lx,xtoys[i])-xpos; ytoys[i]=upper_bound(ypos,ypos+ly,ytoys[i])-ypos; } w=lx+1; h=ly+1; xc=xtoys;yc=ytoys; //grid.resize(w,vector<ll>(h,0)); /*for (ll i = 0; i<n; i++){ grid[(xtoys[i])*m+ytoys[i]]++; } if (grid[(w-1)*m+h-1]>0){ return -1; }*/ for (int i = 0; i<n; i++){ indices[i]=i; } sort(indices,indices+n,comp); /*for (int i = 0; i<n; i++){ cout<<xtoys[indices[i]]<<' '<<ytoys[indices[i]]<<'\n'; }*/ if (xtoys[indices[0]]==w-1&&ytoys[indices[0]]==h-1){ return -1; } ll l = 0, r = n; while (l<=r){ ll mid = (l+r)/2;; if (success(mid)){ r=mid-1; } else { l=mid+1; } } return l; }
#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...