제출 #306901

#제출 시각아이디문제언어결과실행 시간메모리
306901dolijanDrvca (COCI19_drvca)C++14
110 / 110
298 ms12408 KiB
#include<bits/stdc++.h> using namespace std; const int mn=1e5+100; int a[mn]; bool check(int prvi,int drugi,int n) { vector<int> aa; vector<int> bb; multiset<int> preostali; multiset<int> razlike; multiset<int>::iterator it,ptr; aa.push_back(a[prvi]); aa.push_back(a[drugi]); for(int i=0;i<drugi;i++) { if(i!=prvi) preostali.insert(a[i]); } for(int i=drugi+1;i<n;i++) { preostali.insert(a[i]); } it=preostali.begin(); ptr=it; it++; while(it!=preostali.end()) { razlike.insert(*it-*ptr); it++; ptr++; } int raz=a[drugi]-a[prvi]; for(int i=drugi+1;i<n;i++) { int zad=aa[aa.size()-1]; if(a[i]-zad==raz) { aa.push_back(a[i]); it=preostali.find(a[i]); multiset<int>::iterator kraj=preostali.end(); kraj--; if(it==preostali.begin()) { ptr=it; ptr++; preostali.erase(preostali.find(*it)); razlike.erase(razlike.find(*ptr-*it)); } else if(it==kraj) { ptr=it; ptr--; preostali.erase(preostali.find(*it)); razlike.erase(razlike.erase(*it-*ptr)); } else { ptr=it; multiset<int>::iterator veci=it; veci++; ptr--; preostali.erase(preostali.find(*it)); razlike.erase(razlike.find(*it-*ptr)); razlike.erase(razlike.find(*veci-*it)); razlike.insert(*veci-*ptr); } } if(!razlike.empty()) { it=razlike.begin(); ptr=razlike.end(); ptr--; if(*it==*ptr) { /*it=razlike.begin(); while(it!=razlike.end()) { cout<<*it<<" "; it++; }*/ //cout<<endl; break; } } } if(!razlike.empty()) { it=razlike.begin(); ptr=razlike.end(); ptr--; if(*it!=*ptr) return false; } if((int)preostali.size()==0) { preostali.insert(aa[aa.size()-1]); aa.pop_back(); } cout<<aa.size()<<endl; for(int i=0;i<aa.size();i++) cout<<aa[i]<<" "; cout<<endl; cout<<preostali.size()<<endl; it=preostali.begin(); while(it!=preostali.end()) { cout<<*it<<" "; it++; } cout<<endl; return true; } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); /*for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;*/ if(n==2) { cout<<1<<endl; cout<<a[0]<<endl; cout<<1<<endl; cout<<a[1]<<endl; } else { if(!check(0,1,n)) { if(!check(0,2,n)) { if(!check(1,2,n)) { cout<<-1<<endl; } } } } }

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

drvca.cpp: In function 'bool check(int, int, int)':
drvca.cpp:97:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |     for(int i=0;i<aa.size();i++) cout<<aa[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...