답안 #1072905

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1072905 2024-08-24T06:52:34 Z SiliconSquared Minerals (JOI19_minerals) C++14
0 / 100
1 ms 344 KB
#include "minerals.h"

using namespace std;
#include <vector>
#include <iostream>

int query(int x){
    return Query(x+1);
}

int n;
struct mineral{
    int a,b;
    bool f;
    mineral(){a=0;b=n;f=true;}
};
vector<mineral> v;
vector<int> l;
vector<int> r;

void Solve(int N) {
    int a,b,c,q,x,y,z,t;
    n=N;
    v.resize(n,mineral());
    b=0;
    for (int i=0;i<2*n;i++){
        a=query(i);
        if (a>b){
            l.push_back(i);
            b=a;
        }else{
            r.push_back(i);
        }
    }
    t=0;
    for (int i=n/2;i<n;i++){c=query(l[i]);v[i].f=false;}
    vector<pair<int,int>> w;
    vector<pair<int,int>> w2;
    w.push_back({0,N});
    while (!w.empty()){
    //     cout<<'\n';
    // for (int i=0;i<n;i++){cout<<l[i]+1<<'\t';}cout<<'\n';
    // for (int i=0;i<n;i++){cout<<v[i].f<<'\t';}cout<<'\n';
        for (int i=0;i<n;i++){
            if (v[i].a+1==v[i].b){continue;}
            q=query(r[i]);
            if (c!=q){
                v[i].a=(v[i].a+v[i].b)/2;
                c=q;
            }else{
                v[i].b=(v[i].a+v[i].b)/2;
            }
            if (v[i].a+1==v[i].b){t++;}
            if (t==n-1){break;}
            //cerr<<r[i]+1<<':'<<v[i].a<<','<<v[i].b<<';';
        }
        q=w.size();
        for (int i=0;i<q;i++){
            a=w[w.size()-1].first;
            b=w[w.size()-1].second;
            w.pop_back();
            if (a+1==b || a==b){continue;}
            y=(a+b)/2;
            x=(a+y)/2;
            z=(y+b)/2;
            for (int j=x;j<y;j++){
                c=query(l[j]);
                v[j].f=!v[j].f;
            }
            for (int j=y;j<z;j++){
                c=query(l[j]);
                v[j].f=!v[j].f;
            }
            w2.push_back({a,y});
            w2.push_back({y,b});
        }
        w=w2;
        w2.clear();
    }
    vector<bool> zz;
    zz.resize(n,true);
    for (int i=0;i<n;i++){
        if (v[i].a+1==v[i].b){
            zz[v[i].a]=false;
        }else{
            a=i;
        }
    }
    for (int i=0;i<n;i++){
        if (zz[i]){v[a].a=i;}
    }
    for (int i=0;i<n;i++){
        Answer(r[i]+1,l[v[i].a]+1);
    }
}

Compilation message

minerals.cpp: In function 'void Solve(int)':
minerals.cpp:47:13: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
   47 |             if (c!=q){
      |             ^~
minerals.cpp:90:23: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
   90 |         if (zz[i]){v[a].a=i;}
      |                       ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Incorrect 1 ms 344 KB Wrong Answer [5]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -