Submission #1233559

#TimeUsernameProblemLanguageResultExecution timeMemory
1233559Tenis0206How to Avoid Disqualification in 75 Easy Steps (CEOI23_avoid)C++20
15 / 100
1 ms428 KiB
#include <bits/stdc++.h>
#include "avoid.h"

using namespace std;

pair<int,int> scout(int r, int h)
{
    if(h == 1 && r == 10)
    {
        for(int b=0; b<10; b++)
        {
            vector<int> p;
            for(int i=1; i<=1000; i++)
            {
                if((i & (1<<b)) == 0)
                {
                    p.push_back(i);
                }
            }
            send(p);
        }
        vector<int> r = wait();
        int rez = 0;
        for(int b=0; b<10; b++)
        {
            if(!r[b])
            {
                rez += (1<<b);
            }
        }
        return {rez, rez};
    }
    if(r == 20 && h == 20)
    {
        int poz1 = 0, poz2 = 0;
        int st = 1;
        int dr = 1000;
        while(st <= dr)
        {
            int mij = (st + dr) >> 1;
            vector<int> p;
            for(int i=1; i<=mij; i++)
            {
                p.push_back(i);
            }
            send(p);
            vector<int> r = wait();
            if(r.front() == 1)
            {
                poz1 = mij;
                dr = mij - 1;
            }
            else
            {
                st = mij + 1;
            }
        }
        st = poz1 + 1;
        dr = 1000;
        while(st <= dr)
        {
            int mij = (st + dr) >> 1;
            vector<int> p;
            for(int i=poz1+1; i<=mij; i++)
            {
                p.push_back(i);
            }
            send(p);
            vector<int> r = wait();
            if(r.front() == 1)
            {
                poz2 = mij;
                dr = mij - 1;
            }
            else
            {
                st = mij + 1;
            }
        }
        if(poz2 == 0)
        {
            poz2 = poz1;
        }
        return {poz1, poz2};
    }
    if(h == 2 && r == 30)
    {
        for(int b=0; b<10; b++)
        {
            vector<int> p;
            for(int i=1; i<=1000; i++)
            {
                if((i & (1<<b)) == 0)
                {
                    p.push_back(i);
                }
            }
            send(p);
        }
        for(int b=0; b<10; b++)
        {
            vector<int> p;
            for(int i=1; i<=1000; i++)
            {
                if((i & (1<<b)) != 0)
                {
                    p.push_back(i);
                }
            }
            send(p);
        }
        vector<int> r = wait();
        int split = -1;
        for(int b=0; b<10; b++)
        {
            if(r[b] && r[b + 10])
            {
                split = b;
            }
        }
        if(split == -1)
        {
            for(int b=0; b<10; b++)
            {
                vector<int> p;
                for(int i=1; i<=1000; i++)
                {
                    if((i & (1<<b)) == 0)
                    {
                        p.push_back(i);
                    }
                }
                send(p);
            }
            vector<int> r = wait();
            int rez = 0;
            for(int b=0; b<10; b++)
            {
                if(!r[b])
                {
                    rez += (1<<b);
                }
            }
            return {rez, rez};
        }
        for(int b=0; b<10; b++)
        {
            if(!r[b] || !r[b + 10])
            {
                continue;
            }
            vector<int> p;
            for(int i=1; i<=1000; i++)
            {
                if((i & (1<<b)) == 0 && (i & (1<<split)) == 0)
                {
                    p.push_back(i);
                }
            }
            send(p);
        }
        for(int b=0; b<10; b++)
        {
            if(!r[b] || !r[b + 10])
            {
                continue;
            }
            vector<int> p;
            for(int i=1; i<=1000; i++)
            {
                if((i & (1<<b)) == 0 && (i & (1<<split)) != 0)
                {
                    p.push_back(i);
                }
            }
            send(p);
        }
        vector<int> r1 = wait();
        int rez1 = 0, rez2 = 0;
        int poz = 0;
        for(int b=0; b<10; b++)
        {
            if(!r[b])
            {
                rez1 += (1<<b);
                continue;
            }
            if(!r[b + 10])
            {
                continue;
            }
            if(!r1[poz])
            {
                rez1 += (1<<b);
            }
            ++poz;
        }
        for(int b=0; b<10; b++)
        {
            if(!r[b])
            {
                rez2 += (1<<b);
                continue;
            }
            if(!r[b + 10])
            {
                continue;
            }
            if(!r1[poz])
            {
                rez2 += (1<<b);
            }
            ++poz;
        }
        if(rez2 < rez1)
        {
            swap(rez1, rez2);
        }
        return {rez1, rez2};
    }
}

Compilation message (stderr)

avoid.cpp: In function 'std::pair<int, int> scout(int, int)':
avoid.cpp:221:1: warning: control reaches end of non-void function [-Wreturn-type]
  221 | }
      | ^
#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...