제출 #303235

#제출 시각아이디문제언어결과실행 시간메모리
303235daniel920712식물 비교 (IOI20_plants)C++14
5 / 100
147 ms20860 KiB
#include "plants.h"
#include <stdio.h>
#include <vector>
#include <utility>
#include <set>
using namespace std;
vector < int > all;
vector < int > Next[200005];
vector < pair < int , int > > con[200005];
int N,tt=0;
bool use[2000005]={0};
int Con[200005];
int what[200005];
set < int > A;
set < int > B;
void init(int k,vector<int> r)
{
    int a=0,b=0,i,j,ok=0,l,t,t2,x;
    all=r;
    N=r.size();
    if(k==2) tt=1;
    for(i=0;i<N;i++)
    {
        if(k==2)
        {
            if(r[(i+N-1)%N]!=r[i])
            {
                b=0;
                a++;
                con[i].push_back(make_pair(a,0));
                for(j=(i+1)%N;r[(j+N-1)%N]==r[i];j=(j+1)%N)
                {
                    if(j==N-1) ok=1;
                    if(r[i]==0) b--;
                    else b++;
                    con[j].push_back(make_pair(a,b));
                }
            }
        }
        else
        {
            for(i=0;i<N;i++)
            {
                if(r[i]==0)
                {
                    for(j=1;j<k;j++)
                    {
                        t=(i+j)%N;
                        if(use[t]==0&&A.find(t)!=A.end())
                        {
                            Con[t]++;
                            if(B.find(t)!=B.end()) B.erase(t);
                        }
                    }
                    B.insert(i);
                    A.insert(i);

                }
            }

            for(i=0;i<N;i++)
            {
                x=*B.begin();
                use[x]=1;
                what[x]=i;
                for(j=1;j<k;j++)
                {
                    t=(i+j)%N;
                    if(use[t]==0&&A.find(t)!=A.end())
                    {
                        Con[t]--;
                        if(Con[t]==0)
                        if(B.find(t)!=B.end()) B.insert(t);
                    }
                }

                for(j=1;j<k;j++)
                {
                    t=(i-j+2*N)%N;
                    if(use[t]==0&&A.find(t)==A.end())
                    {
                        r[t]--;
                        if(r[t]==0)
                        {
                            for(l=1;l<k;l++)
                            {
                                t2=(i+l)%N;
                                if(use[t2]==0&&A.find(t2)!=A.end())
                                {
                                    Con[t2]++;
                                    if(B.find(t2)!=B.end()) B.erase(t2);
                                }
                            }
                            B.insert(t);
                            A.insert(t);
                        }
                    }

                }




            }


        }
    }
	return;
}
bool F(int A,int B)
{
    if(A==B) return 1;
    if(use[A]) return 0;
    use[A]=1;
    for(auto i:Next[A]) if(F(i,B)) return 1;
    return 0;
}
int compare_plants(int x, int y)
{
    int i;
    if(tt)
    {
        for(auto i:con[x])
        {
            for(auto j:con[y])
            {
                if(i.first==j.first)
                {
                    if(i.second<j.second) return -1;
                    return 1;
                }
            }
        }

    }
    else
    {
        if(what[x]<what[y]) return 1;
        else return -1;
    }

	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

plants.cpp: In function 'void init(int, std::vector<int>)':
plants.cpp:18:21: warning: variable 'ok' set but not used [-Wunused-but-set-variable]
   18 |     int a=0,b=0,i,j,ok=0,l,t,t2,x;
      |                     ^~
plants.cpp: In function 'int compare_plants(int, int)':
plants.cpp:121:9: warning: unused variable 'i' [-Wunused-variable]
  121 |     int i;
      |         ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...