제출 #628469

#제출 시각아이디문제언어결과실행 시간메모리
628469Sasha008Rarest Insects (IOI22_insects)C++17
39.52 / 100
304 ms432 KiB
#include<bits/stdc++.h>
#include "insects.h"
//#pragma GCC optimize ("O3")
using namespace std;
#define el "\n"
#define se " "
#define ll long long
#define ld long double
#define ff first
#define ss second
#define pb push_back
const ll INF=1e18,ch=1e18;
ll a,b,c,d,n,COST,t,last,ab,ba,n1,n2,fl1,fl2,o1,o2,flag,flag1,flag2,g,m,m1,m2,i,j,lr,f,k,l,r,y,o,p,mx=-ch,mx1=-ch,mx2=-ch,q,q1,q2,q3,q4,mn=ch,mn1=ch,mn2=ch,f1,f2,f3,pos,ans,sum,sz=1,MOD=1e9+7,zero=0,a1,b1,c1,val,sum1,cur,res,ans1,res1,kk,kkk,cnt,cnt1,fl;
ll S[2005];
ll A[2005];
ll PR[2005];
//void move_inside(int i)
//void move_outside(int i)
//int press_button()
bool pr(ll m)
{
    if (flag==1)
    {
        flag2=0;
        for(i=0;i<n;i++)
        {
            if (PR[i]+q>m) flag2=1;
            flag2=1;
            if (flag2==1) {PR[i]=0;A[i]=0;move_outside(i);}
        }
    }
    flag=0;
    ans=0;
    for(i=0;i<n;i++)
    {
        if (S[i]==1) continue;
        if (PR[i]==0)
        {
            move_inside(i);
            p=press_button();
            A[i]=1;
            PR[i]=p;
        }
        else
        {
            p=PR[i];
        }
        if (p+q>m)
        {
            A[i]=0;
            move_outside(i);
        }
        else
        {
            ans++;
        }
    }
    if ((m-q)*d==ans) return 1;
    return 0;
}
int min_cardinality(int N)
{
    n=N;
    d=0;
    for(i=0;i<n;i++)
    {
        move_inside(i);
        d++;S[i]=1;

        p=press_button();
        if (p>1)
        {
            move_outside(i);
            d--;S[i]=0;
        }
    }
    for(i=0;i<n;i++)
    {
        if (S[i]==1) move_outside(i);
    }
    o=1;l=2;r=n/d;q=1;
    while(l<=r)
    {
        for(i=0;i<n;i++)
        {
            A[i]=0;
        }
        m=(l+r)/2;
        if (pr(m)==1)
        {
            o=m;
            l=m+1;
            q=m;
            for(i=0;i<n;i++)
            {
                PR[i]=0;
                if (A[i]==1)
                {
                    S[i]=1;
                    move_outside(i);
                }
            }
        }
        else
        {
            r=m-1;flag=1;
        }
    }
    return o;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...