제출 #773413

#제출 시각아이디문제언어결과실행 시간메모리
773413ZHIRDILBILDIZA Difficult(y) Choice (BOI21_books)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
#include"books.h"
#define ll long long
#define fi first
#define se second
using namespace std ;
//void impossible()
//{
//    cout << "-1\n" ;
//    exit(0) ;
//}
//void answer(vector<int> ans)
//{
//    for(int i : ans)
//        cout << i << ' ' ;
//    exit(0) ;
//}
//ll skim(int ind)
//{
//    int num ;
//    cout << "? " << ind << '\n' ;
//    cin >> num ;
//    return num ;
//}
void solve(int n, int k, ll a, int s)
{
    vector<int> ans ;
    ll x[n + 1] = {}, pref[n + 1] = {} ;
    for(int i = 1 ; i <= k ; i++)
    {
        x[i] = skim(i) ;
        pref[i] = pref[i - 1] + x[i] ;
    }
    if(pref[k] > 2ll * a)
        impossible() ;
    if(a <= pref[k] && pref[k] <= 2ll * a)
    {
        for(int i = 1 ; i <= k ; i++)
            ans.push_back(i) ;
        answer(ans) ;
    }
    ll l = 0, r = n + 1 ;
    while(l + 1 < r)
    {
        ll mid = (l + r) >> 1ll, num = x[mid] ;
        if(!num)
        {
            num = skim(mid) ;
            x[mid] = num ;
        }
        if(num < a)l = mid ;
        else r = mid ;
    }
    if(r != n + 1 && x[r] + pref[k - 1] <= 2ll * a)
    {
        for(int i = 1 ; i < k ; i++)
            ans.push_back(i) ;
        ans.push_back(r) ;
        answer(ans) ;
    }
    if(s >= 170)
    {
        l = 0, r = n - k + 2 ;
        vector<pair<ll, int>> w, ls ;
        while(l + 1 < r)
        {
            w.clear() ;
            ll mid = (l + r) >> 1ll, sum = 0 ;
            for(int i = mid ; i < mid + k ; i++)
            {
                ll num = x[i] ;
                if(!num)
                {
                    num = skim(i) ;
                    x[i] = num ;
                }
                sum += num ;
                w.push_back({num, i}) ;
            }
            if(sum > 2ll * a)r = mid ;
            else
            {
                ls = w ;
                ans.clear() ;
                for(auto i : w)
                    ans.push_back(i.se) ;
                if(sum >= a)answer(ans) ;
                l = mid ;
            }
        }
        impossible() ;
    }
    else
    {
        deque<int> d ;
        for(int i = 1 ; i <= k ; i++)
            d.push_back(i) ;
        for(int j = r ; j >= r - k + 1 ; j--)
            if(!x[j])x[j] = skim(j) ;
        for(int j = r - k + 1 ; j <= r ; j++)
        {
            sum -= x[j - r + k] ;
            sum += x[j] ;
            d.pop_front() ;
            d.push_back(j) ;
            if(a <= sum && sum <= 2ll * a)
            {
                for(int i : d)
                    ans.push_back(i) ;
                answer(ans) ;
            }
        }
        impossible() ;
    }
}
//signed main()
//{
//    int n, k, a, s ;
//    cin >> n >> k >> a >> s ;
//    solve(n, k, a, s) ;
//    return 0 ;
//}

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

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:102:13: error: 'sum' was not declared in this scope
  102 |             sum -= x[j - r + k] ;
      |             ^~~