# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
608781 | kshitij_sodani | Seesaw (JOI22_seesaw) | C++14 | 634 ms | 30436 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define a first
#define b second
#define pb push_back
#define endl '\n'
#include <iostream>
llo it[200001];
llo pre[200001];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
llo n;
cin>>n;
for(llo i=0;i<n;i++){
cin>>it[i];
pre[i+1]=pre[i]+it[i];
}
long double ss2=(long double)pre[n]/(long double)n;
vector<pair<long double,llo>> ss;
ss.pb({ss2,n-1});
for(llo i=n-2;i>=0;i--){
llo low=0;
for(llo j=19;j>=0;j--){
if(low+(1<<j)+i<n){
long double tt=(long double)(pre[low+(1<<j)+i+1]-pre[low+(1<<j)]);
tt/=(long double)(i+1);
if(tt<=ss2-0.0000000000001){
low+=(1<<j);
}
}
}
long double tt=(long double)(pre[low+i+1]-pre[low]);
tt/=(long double)(i+1);
ss.pb({tt,i});
low++;
tt=(long double)(pre[low+i+1]-pre[low]);
tt/=(long double)(i+1);
ss.pb({tt,i});
}
sort(ss.begin(),ss.end());
map<llo,llo> tt;
llo su=0;
llo ind=0;
for(llo i=0;i<n;i++){
tt[i]=0;
}
long double ans=10000000000;
for(llo i=0;i<ss.size();i++){
if(tt[ss[i].b]==0){
su++;
tt[ss[i].b]++;
}
else{
tt[ss[i].b]++;
}
if(su==n){
while(ind<i){
if(tt[ss[ind].b]>1){
tt[ss[ind].b]--;
ind++;
}
else{
break;
}
}
}
if(su==n){
if(ss[i].a-ss[ind].a<ans-0.0000000000001){
ans=ss[i].a-ss[ind].a;
}
}
}
cout<<setprecision(10)<<ans<<endl;
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |