Submission #1176834

#TimeUsernameProblemLanguageResultExecution timeMemory
1176834simona1230Last supper (IOI12_supper)C++20
0 / 100
257 ms9764 KiB
#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;

int a[100001],b;
void bin(int x)
{
    for(int i=0; i<b; i++)
    {
        if(x&(1<<i))
        {
            //cout<<1;
            WriteAdvice(1);
        }
        else
        {
            //cout<<0;
            WriteAdvice(0);
        }
    }
}

void ComputeAdvice(int *c, int n, int k, int m)
{
    int h=0;
    for(int i=1; i<=n; i++)
    {
        //cout<<c[h]<<" ";
        a[i]=c[h++];
        int x=1,y=0;
        while(x*2<=a[i])x*=2,y++;
        b=max(y,b);
    }
    b++;

    for(int i=1; i<=n; i++)
        bin(a[i]);
    ///cout<<endl;
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;

int c[100001],B;
int dec(string s)
{
    int x=0;
    for(int i=0;i<B;i++)
        if(s[i]=='1')x+=(1<<i);
    return x;
}

int id[100001],in[100001];
vector<int> p[100001];
struct cmp
{
    bool operator()(const int&x,const int&y)const
    {
        return p[x][id[x]]>p[y][id[y]];
    }
};

void Assist(unsigned char *a, int n, int k, int r)
{
    int h=0;
    B=r/n;
    for(int i=1;i<=n;i++)
    {
        string s="";
        for(int id=(i-1)*B;id<i*B;id++)
        {
            //cout<<a[h];
            if(a[h++])s+='1';
            else s+='0';
        }
        //cout<<endl;
        //cout<<s<<endl;
        c[i]=dec(s);
        p[c[i]].push_back(i);
    }
    for(int i=0;i<n;i++)
    {
        p[i].push_back(n+1);
    }

    vector<int> curr;
    set<int,cmp> s;

    for(int i=0;i<k;i++)
    {
        in[i]=1;
        s.insert(i);
    }

    for(int i=0;i<n;i++)
    {
        int x=GetRequest();
        if(in[x])
        {
            s.erase(x);
            id[x]++;
            s.insert(x);
            continue;
        }

        /*for(int j=0;j<n;j++)
            cout<<id[j]<<" ";
        cout<<endl;
        for(auto it=s.begin();it!=s.end();it++)
            cout<<*it<<" ";
        cout<<endl;*/
        int y=*s.begin();
        in[y]=0;
        in[x]=1;
        PutBack(y);

        s.erase(y);
        id[x]++;
        s.insert(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...