제출 #765724

#제출 시각아이디문제언어결과실행 시간메모리
7657241075508020060209tcDrvca (COCI19_drvca)C++14
110 / 110
43 ms4896 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define X first
#define Y second
int n;
int ar[200005];
int tar[200005];
int sfok[200005];
int chk(vector<int>A){
for(int i=1;i<A.size();i++){
       // cout<<A[i]-A[i-1]<<endl;
    if((A[i]-A[i-1])!=(A[1]-A[0]) ){
        return 0;
    }
}
return 1;
}
vector<int>A;vector<int>B;int bok;

void fot(int spl){
  //  cout<<"ft";
    for(int i=spl;i<=n;i++){
        B.push_back(i);
    }
    if(B.size()==0){
        B.push_back(n);
        A.pop_back();
    }
    cout<<A.size()<<endl;
    for(int i=0;i<A.size();i++){
        cout<<ar[A[i]]<<" ";
    }cout<<endl;
    cout<<B.size()<<endl;
    for(int i=0;i<B.size();i++){
        cout<<ar[B[i]]<<" ";
    }
    exit(0);
}


void ot(){
if(bok==0){return;}
//cout<<"tyu";
int lstpl=A[A.size()-1];

if(lstpl==n){fot(n+1);}
if(lstpl==n-1){
    if(B.size()==0){
        fot(n);
    }
    if(B.size()==1){
        fot(n);
    }
    if(B.size()>=2){
        if(ar[B[1]]-ar[B[0]]==ar[n]-ar[B[B.size()-1]]){
            fot(n);
        }else{
            return;
        }
    }
    return;
}

if(sfok[lstpl+1]==0){return;}
if(B.size()==0){
    fot(lstpl+1);
    return;
}
if(B.size()==1){
    if(ar[lstpl+1]-ar[B[0]]==ar[n]-ar[n-1]){
        fot(lstpl+1);
    }
    return;
}
    if(ar[lstpl+1]-ar[B[B.size()-1]]==ar[n]-ar[n-1]&&ar[B[1]]-ar[B[0]]==ar[n]-ar[n-1]){
        fot(lstpl+1);
    }

}

signed main(){
cin>>n;
for(int i=1;i<=n;i++){
    cin>>ar[i];
}
if(n==2){
    cout<<"1\n";
    cout<<ar[1]<<endl;
    cout<<"1\n";
    cout<<ar[2]<<endl;return 0;
}
sort(ar+1,ar+n+1);
sfok[n]=1;
for(int i=n-1;i>=1;i--){
    if(ar[i]-ar[i+1]!=ar[n-1]-ar[n]){
        break;
    }
    sfok[i]=1;
}

A.clear();B.clear();bok=1;
A.push_back(1);
A.push_back(2);
//cout<<"hehe";
ot();

for(int i=3;i<=n;i++){
        //cout<<i<<" ";
    if(ar[i]-ar[A[A.size()-1]]==ar[2]-ar[1]){
        A.push_back(i);
        ot();
    }else{
        if(B.size()<=1){
            B.push_back(i);
            continue;
        }
        if(ar[i]-ar[B.back()]!=ar[B[1]]-ar[B[0]]){
            bok=0;
        }
        B.push_back(i);
    }
}
//cout<<"hihi";
A.clear();B.clear();bok=1;
A.push_back(1);
A.push_back(3);
B.push_back(2);
ot();
for(int i=4;i<=n;i++){
    if(ar[i]-ar[A[A.size()-1]]==ar[3]-ar[1]){
        A.push_back(i);
        ot();
    }else{
        if(B.size()==1){
            B.push_back(i);
            continue;
        }
        if(ar[i]-ar[B.back()]!=ar[B[1]]-ar[B[0]]){
            bok=0;
        }
        B.push_back(i);
    }
}
A.clear();B.clear();bok=1;
B.push_back(1);
A.push_back(2);
A.push_back(3);
ot();
for(int i=4;i<=n;i++){
    if(ar[i]-ar[A[A.size()-1]]==ar[3]-ar[2]){
        A.push_back(i);
        ot();
    }else{
        if(B.size()==1){
            B.push_back(i);
            continue;
        }
        if(ar[i]-ar[B.back()]!=ar[B[1]]-ar[B[0]]){
            bok=0;
        }
        B.push_back(i);
    }
}
cout<<-1<<endl;

}

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

drvca.cpp: In function 'long long int chk(std::vector<long long int>)':
drvca.cpp:11:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | for(int i=1;i<A.size();i++){
      |             ~^~~~~~~~~
drvca.cpp: In function 'void fot(long long int)':
drvca.cpp:31:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(int i=0;i<A.size();i++){
      |                 ~^~~~~~~~~
drvca.cpp:35:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i=0;i<B.size();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...