Submission #856842

#TimeUsernameProblemLanguageResultExecution timeMemory
856842efedmrlrA Difficult(y) Choice (BOI21_books)C++17
0 / 100
2 ms2012 KiB
#include <bits/stdc++.h>

#include "books.h"
#define lli __uint128_t
#define MP make_pair
#define pb push_back
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<lli> dt;
lli skimmer(int x) {
    if(dt[x] != -1) {
        return dt[x];
    }
    return dt[x] = skim(x);
}

void solve(int N, int K, long long A, int S) {
    dt.assign(N+1, -1);
    vector<int> res;
    lli sum = 0;
    for(int i = 1; i<=K; i++) {
        sum += skimmer(i);
    }
    if(sum > 2*A) impossible();
    lli val = A;
    int l = K, r = N;
    while(l<r) {
        int tm = (l + r) / 2;
        if(val <= skimmer(tm)) {
            r = tm;
        }
        else {
            l = tm + 1;
        }
    }
    if(val <= skimmer(l)) {
        if(sum + skimmer(l) <= 2*A) {
            res.clear();
            for(int i = 1; i<=K-1; i++) res.pb(i);
            res.pb(l);
            answer(res);
        }

    } 
    else {
        l++;
    }
    N = l - 1;
    cout<<"newN: "<<N<<"\n";
    sum = 0;
    res.clear();
    for(int i = 1; i<=K; i++) {
        sum += skimmer(i);
        res.pb(i);
    }
    if(sum >= A) {
        answer(res);
    }
    res.clear();
    for(int i = K; i>=1; i--) {
        sum -= skimmer(i);
        sum += skimmer(N);
        res.pb(N);
        N--;
        
        
        if(sum >= A) {
            for(int j = 1; j<i; j++) {
                res.pb(j);
            }            
            answer(res);
        }
    }
    impossible();    
}

Compilation message (stderr)

books.cpp: In function '__int128 unsigned skimmer(int)':
books.cpp:19:14: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<__int128 unsigned>, __int128 unsigned>::value_type' {aka '__int128 unsigned'} and 'int' [-Wsign-compare]
   19 |     if(dt[x] != -1) {
books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:32:12: warning: comparison of integer expressions of different signedness: '__int128 unsigned' and 'long long int' [-Wsign-compare]
   32 |     if(sum > 2*A) impossible();
      |        ~~~~^~~~~
books.cpp:45:29: warning: comparison of integer expressions of different signedness: '__int128 unsigned' and 'long long int' [-Wsign-compare]
   45 |         if(sum + skimmer(l) <= 2*A) {
      |            ~~~~~~~~~~~~~~~~~^~~~~~
books.cpp:64:12: warning: comparison of integer expressions of different signedness: '__int128 unsigned' and 'long long int' [-Wsign-compare]
   64 |     if(sum >= A) {
      |        ~~~~^~~~
books.cpp:75:16: warning: comparison of integer expressions of different signedness: '__int128 unsigned' and 'long long int' [-Wsign-compare]
   75 |         if(sum >= A) {
      |            ~~~~^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...