Submission #418498

#TimeUsernameProblemLanguageResultExecution timeMemory
418498AdOjis485A Difficult(y) Choice (BOI21_books)C++14
Compilation error
0 ms0 KiB
#include <vector>
#include <iostream>
#include <algorithm>

#include "books.h"

#define int long long

using namespace std;
//
// --- Sample implementation for the task books ---
//
// To compile this program with the sample grader, place:
//     books.h books_sample.cpp sample_grader.cpp
// in a single folder and run:
//     g++ books_sample.cpp sample_grader.cpp
// in this folder.
//

vector<long long> vals;

long long skim2(int x)
{
    while(x < 0 || x >= vals.size()){}
    if(vals[x] == 0) vals[x] = skim(x + 1);
    return vals[x];
}

void solve(int N, int K, long long A, int S) 
{
    vals.assign(N, 0ll);
    
    vector<int> lowest(K);
    int losum = 0;    
    for(int i = 0; i < K; i ++)
    {
        lowest[i] = skim2(i);
        losum += lowest[i];
    }

    vector<int> ansvec(K);
    for(int i = 0; i < K; i ++) ansvec[i] = i + 1;

    if(losum > 2 * A) impossible();
    else if(losum >= A) answer(ansvec);

    int lo = 0, hi = N;
    while(lo + 1 < hi)
    {
        int m = (lo + hi) / 2;
        if(skim2(m) < A) lo = m;
        else hi = m;
    }

    if(hi < N && losum - lowest[K - 1] + skim2(hi) <= 2 * A)
    {
        ansvec[K - 1] = hi + 1;
        answer(ansvec);
    }

    hi --;
    if(hi < K) impossible();

    int j = K - 1;
    while(losum < A && j >= 0)
    {
        losum += skim2(hi) - lowest[j];
        ansvec[j] = hi + 1;
        j --;
        hi --;
    }
    if(losum < A) impossible();
    else
    {
        while(losum > 2 * A) {}
        answer(ansvec);
    }

}

Compilation message (stderr)

books.cpp: In function 'long long int skim2(long long int)':
books.cpp:24:22: 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]
   24 |     while(x < 0 || x >= vals.size()){}
      |                    ~~^~~~~~~~~~~~~~
books.cpp: In function 'void solve(long long int, long long int, long long int, long long int)':
books.cpp:45:32: error: could not convert 'ansvec' from 'vector<long long int>' to 'vector<int>'
   45 |     else if(losum >= A) answer(ansvec);
      |                                ^~~~~~
      |                                |
      |                                vector<long long int>
books.cpp:58:16: error: could not convert 'ansvec' from 'vector<long long int>' to 'vector<int>'
   58 |         answer(ansvec);
      |                ^~~~~~
      |                |
      |                vector<long long int>
books.cpp:76:16: error: could not convert 'ansvec' from 'vector<long long int>' to 'vector<int>'
   76 |         answer(ansvec);
      |                ^~~~~~
      |                |
      |                vector<long long int>