Submission #307171

#TimeUsernameProblemLanguageResultExecution timeMemory
307171vipghn2003Robots (IOI13_robots)C++14
90 / 100
3076 ms13688 KiB
#include"robots.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
using namespace std;

const int N=1e6+5;
int a,b,t,x[N],y[N];
bool vis[N];
vector<tuple<int,int,int>>order;

bool check(int lim)
{
    for(int i=0;i<t;i++) vis[i]=false;
    multiset<pii>cur;
    for(int i=0;i<b;i++) cur.insert(mp(y[i],lim));
    for(auto&x:order)
    {
        int w=get<0>(x);
        int s=get<1>(x);
        int id=get<2>(x);
        auto it=cur.upper_bound(mp(s,1e9));
        if(it!=cur.end())
        {
            vis[id]=true;
            pii tmp=*it;
            cur.erase(it);
            if(tmp.se!=1) cur.insert(mp(tmp.fi,tmp.se-1));
        }
    }
    cur.clear();
    for(int i=0;i<a;i++) cur.insert(mp(x[i],lim));
    for(auto&x:order)
    {
        int w=get<0>(x);
        int s=get<1>(x);
        int id=get<2>(x);
        if(vis[id]) continue;
        auto it=cur.upper_bound(mp(w,1e9));
        if(it==cur.end()) return false;
        pii tmp=*it;
        cur.erase(it);
        if(tmp.se!=1) cur.insert(mp(tmp.fi,tmp.se-1));
    }
    return true;
}

int putaway(int A,int B,int T,int X[],int Y[],int W[],int S[])
{
    a=A,b=B,t=T;
    for(int i=0;i<A;i++) x[i]=X[i];
    for(int i=0;i<B;i++) y[i]=Y[i];
    order.resize(T);
    for(int i=0;i<T;i++) order[i]=make_tuple(W[i],S[i],i);
    sort(order.begin(),order.end());
    reverse(order.begin(),order.end());
    int l=1,r=T,res=-1;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(!check(mid)) l=mid+1;
        else
        {
            res=mid;
            r=mid-1;
        }
    }
    return res;
}
/*
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int a,b,t;
    cin>>a>>b>>t;
    int x[a],y[b],w[t],s[t];
    for(int i=0;i<a;i++) cin>>x[i];
    for(int i=0;i<b;i++) cin>>y[i];
    for(int i=0;i<t;i++) cin>>w[i]>>s[i];
    cout<<putaway(a,b,t,x,y,w,s);
}
*/
/*
2 1 3
2 5
2
3 1
5 3
2 2
*/

Compilation message (stderr)

robots.cpp: In function 'bool check(int)':
robots.cpp:21:13: warning: unused variable 'w' [-Wunused-variable]
   21 |         int w=get<0>(x);
      |             ^
robots.cpp:38:13: warning: unused variable 's' [-Wunused-variable]
   38 |         int s=get<1>(x);
      |             ^
#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...