제출 #1148683

#제출 시각아이디문제언어결과실행 시간메모리
1148683DobromirAngelovDetecting Molecules (IOI16_molecules)C++20
100 / 100
35 ms6728 KiB
#include "molecules.h"
#include<bits/stdc++.h>
#define fi first
#define se second

using namespace std;

const int MAXN=2e5+5;

int n;
pair<int,int> a[MAXN];
long long pref[MAXN];
long long suff[MAXN];

vector<int> answer(int l,int r)
{
    vector<int> ans;
    for(int i=1;i<=l;i++) ans.push_back(a[i].se);
    for(int i=n;i>n-r;i--) ans.push_back(a[i].se);
    return ans;
}

std::vector<int> find_subset(int L, int R, std::vector<int> w) {
    n=w.size();
    for(int i=0;i<n;i++)
    {
        a[i+1].fi=w[i];
        a[i+1].se=i;
    }
    
    sort(a+1,a+n+1);
    int mn=a[1].fi;
    for(int i=1;i<=n;i++) a[i].fi-=mn;
    for(int i=1;i<=n;i++) pref[i]=pref[i-1]+a[i].fi;
    for(int i=n;i>=1;i--) suff[i]=suff[i+1]+a[i].fi;

    for(int i=1;i<=n;i++)
    {
        long long l=(long long)L-1LL*i*mn;
        long long r=(long long)R-1LL*i*mn;

        if(l>=0)
        {
            if(l<=pref[i] && pref[i]<=r)
            {
                return answer(i,0);
            }
            if(l<=suff[n-i+1] && suff[n-i+1]<=r)
            {
                return answer(0,i);
            }
            if(pref[i]<l && r<suff[n-i+1])
            {
                for(int j=i;j>=0;j--)
                {
                    long long cur=pref[j]+suff[n-(i-j)+1];
                    if(l<=cur && cur<=r)
                    {
                        return answer(j,i-j);
                    }
                }
            }
        }
        else
        {
            if(pref[i]<=r)
            {
                return answer(i,0);
            }
        }
    }

    return vector<int>(0);
}

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

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...