107202024-04-10 16:26:40peti1234A válaszadás nehézségeicpp17Hibás válasz 0/1008ms4380 KiB
#include <bits/stdc++.h>
#include "AdamEsEva.h"

using namespace std;
const long long maxval=1e18, cel=67, speckerd=4; // hogy ne csorduljon tul
int kerddb;
long long kezd[cel+1], veg[cel+1];

void process(long long a) {
    if (a>maxval) {
        a=1;
    }
    bool res=ask(a);
    for (int i=1; i<=cel; i++) {
        if (i>=kerddb) {
            if (res) kezd[i]=max(kezd[i], a);
            else veg[i]=min(veg[i], a-1);
        } else {
            if (res) veg[i]=min(veg[i], a-1);
            else kezd[i]=max(kezd[i], a);
        }
    }
}

long long calc(long long a) {
    long long sum=0;

    for (int i=1; i<=kerddb; i++) {
        long long s=veg[i]-max(kezd[i], a);
        if (s>=0) sum+=s+1;
    }
    for (int i=kerddb+1; i<=cel; i++) {
        long long s=min(veg[i], a-1)-kezd[i];
        if (s>=0) sum+=s+1;
    }
    return sum;
}

void new_game() {
    kerddb=0;
    for (int i=1; i<=cel; i++) {
        kezd[i]=1, veg[i]=maxval;
    }

    for (int i=1; i<=speckerd; i++) {
        process((kezd[cel]+veg[cel])/2);
    }

    for (int j=speckerd+1; j<=cel; j++) {
        long long sum=0;
        for (int i=1; i<=cel; i++) {
            if (kezd[i]<=veg[i]) {
                sum+=veg[i]-kezd[i]+1;
            }
        }
        long long fel=sum/2;
        long long lo=1, hi=maxval+1, mid, vallo=calc(lo), valhi=calc(hi), valmid;
        while (hi-lo>1) {
            mid=(hi+lo+1)/2;
            valmid=calc(mid);
            if ((valmid<=fel && vallo<=fel) || (valmid>fel && vallo>fel)) {
                lo=mid;
                vallo=valmid;
            } else {
                hi=mid;
                valhi=valmid;
            }
        }
        if (abs(valhi-fel)<abs(vallo-fel)) process(hi);
        else process(lo);
    }

    long long sum=0, res=0;
    for (int j=1; j<=cel; j++) {
        if (kezd[j]<=veg[j]) {
            res=kezd[j];
            sum+=veg[j]-kezd[j]+1;
        }
    }
    answer(res);
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/100
1Hibás válasz4ms1884 KiB
2Hibás válasz4ms2120 KiB
3Hibás válasz4ms2284 KiB
4Hibás válasz4ms2496 KiB
5Hibás válasz4ms2744 KiB
6Hibás válasz4ms2916 KiB
7Hibás válasz4ms3168 KiB
8Hibás válasz4ms3384 KiB
9Hibás válasz4ms3552 KiB
10Hibás válasz4ms3796 KiB
11Hibás válasz4ms4008 KiB
12Hibás válasz4ms4060 KiB
13Hibás válasz4ms4064 KiB
14Hibás válasz4ms4064 KiB
15Hibás válasz4ms4060 KiB
16Hibás válasz4ms4096 KiB
17Hibás válasz4ms4212 KiB
18Hibás válasz4ms4136 KiB
19Hibás válasz4ms4140 KiB
20Hibás válasz4ms4132 KiB
21Hibás válasz4ms4280 KiB
22Hibás válasz4ms4380 KiB
23Hibás válasz4ms4232 KiB
24Hibás válasz4ms4232 KiB
25Hibás válasz4ms4236 KiB
26Hibás válasz4ms4240 KiB
27Hibás válasz4ms4240 KiB
28Hibás válasz4ms4236 KiB
29Hibás válasz4ms4236 KiB
30Hibás válasz4ms4236 KiB
31Hibás válasz4ms4348 KiB
32Hibás válasz4ms4232 KiB
33Hibás válasz4ms4236 KiB
34Hibás válasz4ms4236 KiB
35Hibás válasz8ms4236 KiB
36Hibás válasz4ms4364 KiB