제출 #1362556

#제출 시각아이디문제언어결과실행 시간메모리
1362556AvianshMineral deposits (BOI23_mineraldeposits)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>

using namespace std;

mt19937 rng(1234);

const int mxb = 1e8;

signed main(){
    int b,k,w;
    cin >> b >> k >> w;
    cout << "? " << -b << " " << -b << endl;
    vector<int>bot(k);
    for(int i = 0;i<k;i++){
        cin >> bot[i];
    }

    cout << "? " << -b << " " << b << endl;
    vector<int>top(k);
    for(int i = 0;i<k;i++){
        cin >> top[i];
    }
    //find intersections
    set<array<int,2>>pts;
    for(int i : bot){
        for(int j : top){
            if(i+j>=2*b){
                //intersect
                int dist = (i+j-2*b);
                if(dist%2){
                    //bad intersection
                    continue;
                }
                //good intersection
                int y = b-j+dist/2;
                int x = -b+dist/2;
                pts.insert({x,y});
            }
        }
    }
    //for testing just check one by one
    //prune
    set<array<int,2>>pruned;

    for(array<int,2>a:pts){
        if(-b<=a[0]&&a[0]<=b&&-b<=a[1]&&a[1]<=b){
            pruned.insert(a);
        }
    }
    set<array<int,2>>ans;
    int x = rng();
    int y = rng();
    x%=mxb;
    y%=mxb;
    if(rng()%2){
        x=-x;
    }
    if(rng()%2){
        y=-y;
    }
    rigpt={x,y};
    while(1){
        set<int>dists;
        for(array<int,2>a:pruned){
            dists.insert(abs(a[0]-rigpt[0])+abs(a[1]-rigpt[1]));
        }
        if(dists.size()!=pruned.size()){
            //duplicates
            int x = rng();
            int y = rng();
            x%=mxb;
            y%=mxb;
            if(rng()%2){
                x=-x;
            }
            if(rng()%2){
                y=-y;
            }
            rigpt={x,y};
        }
        else{
            break;
        }
    }
    cout << "? " << rigpt[0] << " " << rigpt[1] << endl;
    vector<int>rig(k);
    for(int i = 0;i<k;i++){
        cin >> rig[i];
    }
    for(array<int,2>a:pruned){
        bool wor = 0;
        for(int i : rig){
            int dist = abs(rigpt[0]-a[0])+abs(rigpt[1]-a[1]);
            if(dist==i){
                wor=1;
            }
        }
        if(wor){
            ans.insert(a);
        }
    }
    //assert(ans.size()==k);
    cout << "! ";
    for(array<int,2>a:ans){
        cout << a[0] << " " << a[1] << " ";
    }
    cout << endl;
    return 0;
}

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

Main.cpp: In function 'int main()':
Main.cpp:61:5: error: 'rigpt' was not declared in this scope
   61 |     rigpt={x,y};
      |     ^~~~~