Submission #433321

#TimeUsernameProblemLanguageResultExecution timeMemory
433321lucaperjuRobots (IOI13_robots)C++14
100 / 100
552 ms23024 KiB
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;

int n,na,nb;

bool desc (int a, int b)
{
    return a>b;
}

struct ura
{
    int a,b,ok;
}v[1000003];

bool cmp (ura a, ura b)
{
    return a.b<b.b;
}
int cnta[50003],cntb[50003],nxta[50003],nxtb[50003];

int getnextA(int pz)
{
    if(nxta[pz]==pz)
        return pz;
    return nxta[pz]=getnextA(nxta[pz]);
}

void addToA (int pz, int val)
{
    int pzadd=getnextA(v[pz].a);
    if(pzadd)
    {
        v[pz].ok=1;
        ++cnta[pzadd];
        if(cnta[pzadd]==val)
            nxta[pzadd]=nxta[pzadd-1];
    }
}

int getnextB(int pz)
{
    if(nxtb[pz]==pz)
        return pz;
    return nxtb[pz]=getnextB(nxtb[pz]);
}

void addToB (int pz, int val)
{
    int pzadd=getnextB(v[pz].b);
    if(pzadd)
    {
        v[pz].ok=1;
        ++cntb[pzadd];
        if(cntb[pzadd]==val)
            nxtb[pzadd]=nxtb[pzadd-1];
    }
}

bool verif (int val)
{
    for(int i=1;i<=na;++i)
        cnta[i]=0,nxta[i]=i;
    for(int i=1;i<=nb;++i)
        cntb[i]=0,nxtb[i]=i;
    for(int i=1;i<=n;++i)
    {
        v[i].ok=0;
        addToA(i,val);
    }
    for(int i=1;i<=n;++i)
    {
        if(!v[i].ok)
            addToB(i,val);
        if(!v[i].ok)
            return false;
    }
    return true;
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    n=T;
    na=A;
    nb=B;
    sort(X,X+A,desc);
    sort(Y,Y+B,desc);
    int ok=1;
    for(int i=0;i<T;++i)
    {
        int k=-1;
        int pas=(1<<15);
        while(pas)
        {
            if(k+pas<A && X[k+pas]>W[i])
                k+=pas;
            pas>>=1;
        }
        v[i+1].a=k+1;
        k=-1;
        pas=(1<<15);
        while(pas)
        {
            if(k+pas<B && Y[k+pas]>S[i])
                k+=pas;
            pas>>=1;
        }
        v[i+1].b=k+1;
        v[i+1].ok=0;
        if(v[i+1].a == 0 && v[i+1].b == 0)
            return -1;
    }
    sort(v+1,v+T+1,cmp);
    int pas=(1<<19);
    int k=0;
    while(pas)
    {
        if(!verif(k+pas))
            k+=pas;
        pas>>=1;
    }
    return k+1;
}


/*
#define fail(s, x...) do { \
		fprintf(stderr, s "\n", ## x); \
		exit(1); \
	} while(0)
#define MAX_A 50000
#define MAX_B 50000
#define MAX_T 500000
static int X[MAX_A];
static int Y[MAX_B];
static int W[MAX_T];
static int S[MAX_T];
int main() {
    int A, B, T, i;
	int res;

	FILE *f = fopen("a.in", "r");
	if (!f)
		fail("Failed to open input file.");

	res = fscanf(f, "%d", &A);
	if (res != 1)
		fail("Failed to read A from input file.");
	if (A < 0 || A > MAX_A)
		fail("A is out of bounds.");

	res = fscanf(f, "%d", &B);
	if (res != 1)
		fail("Failed to read B from input file.");
	if (B < 0 || B > MAX_B)
		fail("B is out of bounds.");

	res = fscanf(f, "%d", &T);
	if (res != 1)
		fail("Failed to read T from input file.");
	if (T < 1 || T > MAX_T)
		fail("T is out of bounds.");

	for (i = 0; i < A; i++) {
		res = fscanf(f, "%d", &X[i]);
		if (res != 1)
		    fail("Failed to read data from input file.");
    }
	for (i = 0; i < B; i++) {
        res = fscanf(f, "%d", &Y[i]);
        if (res != 1)
            fail("Failed to read data from input file.");
    }
	for (i = 0; i < T; i++) {
        res = fscanf(f, "%d%d", &W[i], &S[i]);
        if (res != 2)
            fail("Failed to read data from input file.");
    }
	fclose(f);

	int answer = putaway(A, B, T, X, Y, W, S);

	printf("%d\n", answer);

	return 0;
}*/

Compilation message (stderr)

robots.cpp: In function 'int putaway(int, int, int, int*, int*, int*, int*)':
robots.cpp:88:9: warning: unused variable 'ok' [-Wunused-variable]
   88 |     int ok=1;
      |         ^~
#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...