Submission #954386

#TimeUsernameProblemLanguageResultExecution timeMemory
954386andrei_boacaChameleon's Love (JOI20_chameleon)C++17
64 / 100
45 ms568 KiB
#include "chameleon.h"
#include <bits/stdc++.h>
//#include "grader.cpp"
using namespace std;
namespace
{
    vector<int> muchii[1005];
    int n;
    int cul[1005];
    int p[1005],par[1005];
    bool use[1005];
    int nr[1005];
    void dfs(int nod)
    {
        for(int i:muchii[nod])
            if(cul[i]==-1)
            {
                cul[i]=1-cul[nod];
                dfs(i);
            }
    }
    void plsfind(vector<int> v,int me)
    {
        if(v.empty()||muchii[me].size()==3)
            return;
        int st=0;
        int dr=v.size();
        dr--;
        int poz=1e9;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            vector<int> nodes;
            nodes.push_back(me);
            for(int i=0;i<=mij;i++)
                nodes.push_back(v[i]);
            int val=Query(nodes);
            if(val<nodes.size())
            {
                poz=mij;
                dr=mij-1;
            }
            else
                st=mij+1;
        }
        if(poz>=v.size())
            return;
        muchii[me].push_back(v[poz]);
        muchii[v[poz]].push_back(me);
        vector<int> aux;
        for(int i=poz+1;i<v.size();i++)
            aux.push_back(v[i]);
        plsfind(aux,me);
    }
}
void Solve(int N)
{
    n=N;
    for(int i=2;i<=2*n;i++)
    {
        for(int j=1;j<=2*n;j++)
            cul[j]=-1;
        for(int j=1;j<i;j++)
            if(cul[j]==-1)
            {
                cul[j]=0;
                dfs(j);
            }
        vector<int> a,b;
        for(int j=1;j<i;j++)
        {
            if(cul[j]==0)
                a.push_back(j);
            else
                b.push_back(j);
        }
        plsfind(a,i);
        plsfind(b,i);
    }
    for(int i=1;i<=2*n;i++)
    {
        int lg=muchii[i].size();
        if(muchii[i].size()==3)
        {
            for(int j=0;j<muchii[i].size();j++)
                nr[j]=0;
            for(int j=0;j<muchii[i].size();j++)
                for(int k=j+1;k<muchii[i].size();k++)
                {
                    int val=Query({i,muchii[i][j],muchii[i][k]});
                    if(val==2)
                    {
                        nr[j]++;
                        nr[k]++;
                    }
                }
            for(int j=0;j<muchii[i].size();j++)
                if(nr[j]==2)
                    p[i]=muchii[i][j];
        }
    }
    for(int i=1;i<=2*n;i++)
    {
        if(p[i]==0)
        {
            if(use[i])
                continue;
            Answer(i,muchii[i][0]);
            use[i]=1;
            use[muchii[i][0]]=1;
            continue;
        }
        vector<int> nodes;
        int nod=i;
        while(true)
        {
            if(nod==i&&nodes.size()>0)
                break;
            nodes.push_back(nod);
            int fiu=p[nod];
            par[fiu]=nod;
            nod=fiu;
        }
        for(int j:nodes)
            if(!use[j])
            {
                int a=muchii[j][0]^muchii[j][1]^muchii[j][2]^par[j]^p[j];
                use[a]=1;
                use[j]=1;
                Answer(a,j);
            }
    }
}

Compilation message (stderr)

chameleon.cpp: In function 'void {anonymous}::plsfind(std::vector<int>, int)':
chameleon.cpp:38:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |             if(val<nodes.size())
      |                ~~~^~~~~~~~~~~~~
chameleon.cpp:46:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |         if(poz>=v.size())
      |            ~~~^~~~~~~~~~
chameleon.cpp:51:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for(int i=poz+1;i<v.size();i++)
      |                         ~^~~~~~~~~
chameleon.cpp: In function 'void Solve(int)':
chameleon.cpp:85:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |             for(int j=0;j<muchii[i].size();j++)
      |                         ~^~~~~~~~~~~~~~~~~
chameleon.cpp:87:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |             for(int j=0;j<muchii[i].size();j++)
      |                         ~^~~~~~~~~~~~~~~~~
chameleon.cpp:88:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |                 for(int k=j+1;k<muchii[i].size();k++)
      |                               ~^~~~~~~~~~~~~~~~~
chameleon.cpp:97:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |             for(int j=0;j<muchii[i].size();j++)
      |                         ~^~~~~~~~~~~~~~~~~
chameleon.cpp:82:13: warning: unused variable 'lg' [-Wunused-variable]
   82 |         int lg=muchii[i].size();
      |             ^~
#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...