1 solutions

  • 0
    @ 2024-2-20 8:41:01
    #include "coreputer.h"
    
    #include <iostream>
    
    std::vector<int> malfunctioning_cores(int N) {
    	std::vector<int> T;
    	std::vector<int> c(N);
    	std::vector<int> results(N);
    	for(int i=0; i<N; i++) c[i] = 0;
    
    	int a = 0, b = N-1;
    	int finish = 0;
    	while(a!=b){
    		int half = (a+b)/2;
    		T.clear();
    		for(int i=0; i<=half; i++) T.push_back(i);
    
    		results[half] = run_diagnostic(T);
    		if(results[half]>=0){
    			b = half;
    		} else {
    			a = half+1;
    		}
    	}
    
    	finish = results[a];
    
    	int h = a;
    	c[h] = 1;
    
    	if(h!=N-1){
    		for(int i=0; i<h; i++){
    			T.clear();
    			for(int j=0; j<=h; j++){
    				if(i!=j) T.push_back(j);
    			}
    
    			if(run_diagnostic(T)==-1) c[i] = 1;
    		}
    
    		h--;
    		for(int i=h+2; i<N-1; i++){
    			T.clear();
    			for(int j=h+1; j<N; j++){
    				if(i!=j) T.push_back(j);
    			}
    
    			if(run_diagnostic(T)<=0) c[i] = 1;
    		}
    
    		int fp = 0, sp = 0;
    		for(int i=0; i<=h+1; i++) fp += c[i];
    		for(int i=h+2; i<N; i++) sp += c[i];
    
    		if((finish == 0 && fp > sp) || (finish == 1 && fp-1 > sp)) c[N-1] = 1;
    	}
    
    	return c;
    }
    

    Information

    ID
    22
    Time
    500ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    3
    Accepted
    1
    Uploaded By