답안 #962841

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
962841 2024-04-14T08:54:03 Z simona1230 로봇 (IOI13_robots) C++17
28 / 100
161 ms 19316 KB
#include <bits/stdc++.h>
#include "robots.h"
using namespace std;
int a,b,t,x[50000],y[50000],w[1000000],s[1000000];

bool check(int k)
{
    int idx=t-1;
    for(int i=a-1;i>=0;i--)
    {
        int cnt=0;
        while(idx>=0&&cnt<k&&w[idx]<x[i])
        {
            idx--;
            cnt++;
        }
    }

    if(idx==-1)return 1;
    return 0;
}
vector<int> va[50000],vb[50000];

int used[1000000];
bool smart(int k)
{
    int in=0;
    int id=0;
    for(int i=0;i<a;i++)
    {
        int cnt=0;
        for(;id<va[i].size();id++)
        {
            int j=va[i][id];
            if(used[j]!=k)
            {
                used[j]=k;
                cnt++;
                in++;
            }
            if(cnt==k)break;
        }
    }
    id=0;
    for(int i=0;i<b;i++)
    {
        int cnt=0;
        for(;id<vb[i].size();id++)
        {
            int j=vb[i][id];
            if(used[j]!=k)
            {
                used[j]=k;
                cnt++;
                in++;
            }
            if(cnt==k)break;
        }
    }
    if(in==t)return 1;
    return 0;
}

bool cmpa(int i,int j)
{
    return s[i]>s[j];
}
bool cmpb(int i,int j)
{
    return w[i]>w[j];
}

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];
    for(int i=0;i<t;i++)
        w[i]=W[i],s[i]=S[i];

    sort(x,x+a);
    sort(y,y+b);

    if(a+b==2&&t==2)
    {
        if(a==2)
        {
            sort(w,w+t);
            if(x[0]>w[0]&&x[1]>w[1])return 1;
            if(x[1]>w[1])return 2;
            return -1;
        }

        if(b==2)
        {
            sort(s,s+t);
            if(y[0]>s[0]&&y[1]>s[1])return 1;
            if(y[1]>s[1])return 2;
            return -1;
        }

        if(x[0]>w[0]&&y[0]>s[1]||x[0]>w[1]&&y[0]>s[0])return 1;
        if(x[0]<=w[0]&&y[0]<=s[0]||x[0]<=w[1]&&y[0]<=s[1])return -1;
        return 2;
    }

    if(b==0)
    {
        sort(w,w+t);
        int l=1,r=t;
        int ans=-1;
        while(l<=r)
        {
            int m=(l+r)/2;
            if(check(m))
            {
                ans=m;
                r=m-1;
            }
            else l=m+1;
        }

        return ans;
    }

    for(int i=0;i<a;i++)
    {
        for(int j=0;j<t;j++)
        {
            if(x[i]>w[j])va[i].push_back(j);
        }
        sort(va[i].begin(),va[i].end(),cmpa);
    }

    for(int i=0;i<b;i++)
    {
        for(int j=0;j<t;j++)
        {
            if(y[i]>s[j])vb[i].push_back(j);
        }
        sort(vb[i].begin(),vb[i].end(),cmpb);
    }

    int l=1,r=t;
    int ans=-1;
    while(l<=r)
    {
        int m=(l+r)/2;
        if(smart(m))
        {
            ans=m;
            r=m-1;
        }
        else l=m+1;
    }

    return ans;
}


Compilation message

robots.cpp: In function 'bool smart(int)':
robots.cpp:32:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |         for(;id<va[i].size();id++)
      |              ~~^~~~~~~~~~~~~
robots.cpp:48:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |         for(;id<vb[i].size();id++)
      |              ~~^~~~~~~~~~~~~
robots.cpp: In function 'int putaway(int, int, int, int*, int*, int*, int*)':
robots.cpp:106:21: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
  106 |         if(x[0]>w[0]&&y[0]>s[1]||x[0]>w[1]&&y[0]>s[0])return 1;
      |            ~~~~~~~~~^~~~~~~~~~~
robots.cpp:107:22: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
  107 |         if(x[0]<=w[0]&&y[0]<=s[0]||x[0]<=w[1]&&y[0]<=s[1])return -1;
      |            ~~~~~~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14680 KB Output is correct
2 Correct 2 ms 14684 KB Output is correct
3 Correct 3 ms 14684 KB Output is correct
4 Correct 2 ms 14684 KB Output is correct
5 Correct 3 ms 14684 KB Output is correct
6 Correct 2 ms 14680 KB Output is correct
7 Correct 2 ms 14684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 14680 KB Output is correct
2 Correct 2 ms 14684 KB Output is correct
3 Correct 2 ms 14936 KB Output is correct
4 Correct 139 ms 19048 KB Output is correct
5 Correct 161 ms 19044 KB Output is correct
6 Correct 23 ms 19040 KB Output is correct
7 Correct 143 ms 19316 KB Output is correct
8 Correct 157 ms 19200 KB Output is correct
9 Correct 145 ms 19044 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 14680 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 14684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 14684 KB Output isn't correct
2 Halted 0 ms 0 KB -