Submission #1291756

#TimeUsernameProblemLanguageResultExecution timeMemory
1291756serkanrashidChameleon's Love (JOI20_chameleon)C++17
0 / 100
1 ms432 KiB
#include "chameleon.h"
#include <bits/stdc++.h>


using namespace std;

//int Query(const std::vector<int> &p)
//void Answer(int a, int b)

const int MAXN = 1024;

int n;
vector<int>g[MAXN];
bool vis[MAXN];


/*
4
0 0 0 0 1 1 1 1
1 2 3 4 1 2 3 4
6 7 8 5 2 3 4 1
*/

int in[MAXN],ou[MAXN];

vector<int> subred(int l, int r)
{
    vector<int>res;
    for(int i = l; i <= r; i++) res.push_back(i);
    return res;
}

int solve1(int i, int l, int r, int mi)
{
    //cout << "smisli" << endl;
    int nach = l-1;
    int mid;
    //cout << l << "-" << r << endl;
    while(l <= r)
    {
        mid = (l+r)/2;
        vector<int>p = subred(nach+1,mid);
        p.push_back(i);

        if(Query(p) == (mid-nach) + 1 - mi) r = mid-1;
        else l = mid+1;
    }
    return l;
}

int solve2(int i, int l, int r, int mi)
{
    //cout << "smisli" << endl;
    int nach = r+1;
    int mid;
    //cout << l << "-" << r << endl;
    while(l <= r)
    {
        mid = (l+r)/2;
        vector<int>p = subred(mid,nach-1);
        p.push_back(i);

        if(Query(p) == (nach-mid) + 1 - mi) l = mid+1;
        else r = mid-1;
    }
    return r;
}

int solve3(int i)
{
    int pr2 = solve1(i,n+1,2*n,2);

    int sf2 = solve2(i,n+1,2*n,2);

    if(pr2 == sf2) return pr2;

    int k1 = pr2;
    int k2 = sf2;
    int k3 = solve1(i,n+1,2*n,1);
    if(k3 == k1 || k3 == k2) k3 = solve2(i,n+1,2*n,1);
    //cout << k1 << " " << k2 << " " << k3 << "ks" << endl;

    vector<int>p1 = {i,k2,k3};
    if(k3 < 1 || k3 > 2*n) p1.pop_back();

    //cout << k1 << " " << k2 << endl;
    if(Query(p1) == p1.size() - 1) return k1;
    return k2;

}
void Solve(int N)
{
    n = N;

    for(int i = 1; i <= n; i++)
    {
        vector<int>p = subred(n+1,2*n);
        p.push_back(i);
        if(Query(p) == n)
        {

            int d = solve1(i,n+1,2*n,1);
            //cout << i << "   - " << d << endl;
            Answer(i,d);
        }
        else
        {
           // cout << "hello" << endl;
            int d = solve3(i);
            //cout << i << " --- " << d << endl;
            Answer(i,d);

        }
    }

}
#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...