제출 #1354172

#제출 시각아이디문제언어결과실행 시간메모리
1354172lizi14A Difficult(y) Choice (BOI21_books)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include"books.h"
using namespace std;
void solve(int N, int K, long long A, int S) {
    long long fi=skim(1);
    long long bol=skim(N);
    if(fi>2*A){
        //cout<<"II"<<endl;
        impossible();
        
        return;
    }
    long long l=1,r=N;
    long long ans=-1;
    long long gvanca[N+1];
    long long x[N+1];
    fill(x,x+N+1,0);
    x[1]=fi;
    x[N]=bol;
    //if(bol<=A){
        while(l<=r){
            long long m=(l+r)/2;
            long long bati;
            if(x[m]==0){
                bati=skim(m);
                x[m]=bati;
            }
            else bati=x[m];
            if(bati>=A){
                ans=m;
                r=m-1;
            }
            else{
                l=m+1;
            }
        }
    //}
    if(ans==-1){
        
        ans=N+1;
        
        x[0]=fi;
        x[N]=bol;
        for(int i=2; i<=K; i++){
            if(x[i]!=0)continue;
            long long a=skim(i);
            x[i]=a;
        }
        
        for(int i=N-1; i>=N-K+1; i--){
            if(x[i]!=0)continue;
            //cout<<i<<" ";
            //cout<<i<<" "<<N-K<<endl;
            x[i]=skim(i);
            //cout << 1;
        }
        //cout<<"BATII!"<<endl;
        long long sum=0;
        for(int i=1; i<=K; i++){
            sum+=x[i];
        }
        //cout<<sum<<endl;
        if(sum>2*A){
            //cout<<"YY"<<endl;
            impossible();
            
            return;
        }
        
        if(sum>=A && sum<=2*A){
            vector<long long>anss;
            anss.clear();
            for(int i=1; i<=K; i++){
                anss.push_back(i);
            }
            //cout<<"1"<<endl;
            answer(anss);
            
            return;
        }
        
        
        
        vector<long long> g;
        g.clear();
        for(int i=1; i<=K; i++){
            //sum-=x[i];
            if(x[ans-K-i]==0){
                x[ans-K-i]=skim(ans-K-i);
            }
            sum+=abs(x[i]-x[ans-K-i]);
            g.push_back(ans-K-i);
            if(sum>=A && sum<=2*A){
                vector<int>ja=g;
                for(int j=i+1; j<=K; j++){
                    ja.push_back(j);
                }
                //cout<<2<<endl;
                answer(ja);
                
                return;
            }
            //cout<<sum<<endl;
        }
        //cout<<"$"<<endl;
        impossible();
        
        return;
    }
    else{
        // int x[N+1];
        // fill(x,x+N+1,0);
        x[0]=fi;
        x[N]=bol;
        for(int i=2; i<=K; i++){
            if(x[i]!=0)continue;
            long long a=skim(i);
            x[i]=a;
        }
        for(int i=ans-1; i>=ans-K+1; i--){
            if(x[i]!=0)continue;
            long long a=skim(i);
            x[i]=a;
        }
       long long sum=0;
        for(int i=1; i<=K; i++){
            sum+=x[i];
        }
        if(sum>2*A){
            //cout<<"IO"<<endl;
            impossible();
            return;
        }
        if(sum>=A && sum<=2*A){
            vector<long long>anss;
            for(int i=1; i<=K; i++){
                anss.push_back(i);
            }
            //cout<<3<<endl;
            answer(anss);
            
            return;
        }
        
        vector<long long>g;
        for(int i=1; i<=K; i++){
            if(x[ans-K-i]==0){
                x[ans-K-i]=skim(ans-K-i);
            }
            sum+=abs(x[i]-x[ans-K-i]);
            g.push_back(ans-K-i);
            if(sum>=A && sum<=2*A){
                vector<int>ja=g;
                for(int j=i+1; j<=K; j++){
                    ja.push_back(j);
                }
                //cout<<4<<endl;
                answer(ja);
                
                return;
            }
        }
        long long gag=0;
        vector<int>o;
        x[ans]=skim(ans);
        gag+=x[ans];
        //cout<<ans<<endl;
        //cout<<x[ans]<<" ";
        o.push_back(ans);
        for(int i=1; i<=K-1; i++){
            if(x[i]!=0)continue;
            else x[i]=skim(i);
            gag+=x[i];
            o.push_back(i);
        }
        if(gag>=A && gag<=2*A){
            //cout<<5<<endl;
            answer(o);
            
            return;
        }
        //cout<<gag<<endl;
        //cout<<"?"<<endl;
        impossible();
        
        return;
    }
}

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

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:77:20: error: could not convert 'anss' from 'vector<long long int>' to 'vector<int>'
   77 |             answer(anss);
      |                    ^~~~
      |                    |
      |                    vector<long long int>
books.cpp:94:31: error: conversion from 'vector<long long int>' to non-scalar type 'vector<int>' requested
   94 |                 vector<int>ja=g;
      |                               ^
books.cpp:140:20: error: could not convert 'anss' from 'vector<long long int>' to 'vector<int>'
  140 |             answer(anss);
      |                    ^~~~
      |                    |
      |                    vector<long long int>
books.cpp:153:31: error: conversion from 'vector<long long int>' to non-scalar type 'vector<int>' requested
  153 |                 vector<int>ja=g;
      |                               ^