답안 #128317

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
128317 2019-07-10T16:42:52 Z OptxPrime Minerals (JOI19_minerals) C++14
0 / 100
3 ms 504 KB
#include <iostream>
#include <cmath>
#include<vector>
#include <algorithm>
#include <utility>
#include<stack>
#include<queue>
#include<map>
#include <fstream>
#include <minerals.h>

using namespace std;

#define pb push_back
#define mp make_pair
#define ll long long

#define ans Answer
#define query Query


    bool inside[100010];
    int memo[100010];
    int nn;
    int curr,opencurr,tmp;


    void conquer( vector<int> l, vector<int> r )
    {
        int sz = l.size()/2;
        if( l.size()==1 ){
            ans( l[0], r[0] );
            return;
        }
        vector<int> l1, l2;
        l1.clear();
        l2.clear();
        int cnt=0;
        for( int i=0;i<sz;i++ ){
                l1.pb( l[i] );
            if( !inside[ l[i] ] ){ /// mora biti unutra
               cnt= query( l[i] ); ///update cnt kad ubacimo
                inside[ l[i] ]=true;
            }
    }
        for( int i=sz;i<l.size();i++ ){
                l2.pb( l[i] );
            if( inside[ l[i] ] ){       /// ne smije bit unutra
                cnt=query( l[i] );
                inside[ l[i] ]=false;
            }
        }
        vector<int> r1,r2;
        r1.clear();
        r2.clear();
        for( int i=0;i<r.size();i++ ){
                if( r1.size() >= l1.size() ){
                    r2.pb( r[i] );
                    continue;
                }
                if( r2.size() >= l2.size() ){
                    r1.pb( r[i] );
                    continue;
                }
            int tmp=query( r[i] );
            if( tmp  == cnt ){ /// nista se nije desilo, dakle vec je bio taj mineral
                r1.pb( r[i] );
            }
            else{ /// promjenio se broj, dakle dodali smo novi mineral, prema tome on pripada grupi koja je izgasena
                r2.pb( r[i] );
                cnt = tmp;
            }
        }
        conquer( l1,r1 );
        conquer( l2,r2 );
    }
    void Solve(int n)
    {
        nn=n;///globalno n
        int curr=0;
        vector<int> left,right;
        for( int i=1;i<=2*n;i++ ){
                if( left.size() >=n )break;
                int tmp=query(i);
            if( tmp > curr ){  ///novi
                left.pb( i );
                inside[i] = true;
                curr=tmp;
            }
            else{
                right.pb(i);
               /// ne moramo cak ni izbacivati jer je bitno samo mjenjanje, tj flip
            }
        }
        conquer( left, right );
    }

    


























Compilation message

minerals.cpp: In function 'void conquer(std::vector<int>, std::vector<int>)':
minerals.cpp:46:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for( int i=sz;i<l.size();i++ ){
                       ~^~~~~~~~~
minerals.cpp:56:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for( int i=0;i<r.size();i++ ){
                      ~^~~~~~~~~
minerals.cpp: In function 'void Solve(int)':
minerals.cpp:83:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 if( left.size() >=n )break;
                     ~~~~~~~~~~~~^~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -