Submission #880072

#TimeUsernameProblemLanguageResultExecution timeMemory
880072SzypkiBillPrisoner Challenge (IOI22_prison)C++17
53 / 100
13 ms1372 KiB
#include "prison.h" 
#include <vector>
int cyfra(int pozycja, int liczba){
    liczba++;
    if(pozycja>8) return 0;
    //return 1;
    int c = 0;
    int p = 2187;
    for(int i=1; i<=pozycja; i++){
        c=0;
 
        while(liczba>p){
            liczba-=p;
            c++;
        }
        p/=3;
    }
    return c;
}
 
std::vector<std::vector<int>> devise_strategy(int N) {
    int X = 28;
  //return {std::vector<int>(N + 1, 0)};
  std::vector<std::vector<int>> V(X+1);
  int c = 0;
  for(auto &w : V){w.resize(N+1); w[0] = c; c+=1; c%=2;}
  for(int j=1; j<=N; j++){
    V[0][j] = cyfra(1,j) * 10 + 1;
  }
 
  for(int i=1; i<=X; i++){
    for(int j=1; j<=N; j++){
        if(V[i][0]){ //sprawdzam worek B, mam A
            int aktB = cyfra(i%10,j); // cyfra z B
            int aktA = i/10; // cyfra z A
            if(aktB == aktA){
                V[i][j] = cyfra((i%10)+1,j) * 10 + ((i%10)+1);
            }else if(aktB<aktA) V[i][j] = -2;
            else if(aktA<aktB) V[i][j] = -1;
 
        }else{ //sprawdzam worek A, mam B
 
            int aktA = cyfra(i%10,j); // cyfra z A
            int aktB = i/10; // cyfra z B
            if(aktB == aktA){
                V[i][j] = cyfra((i%10)+1,j) * 10 + ((i%10)+1);
            }else if(aktB<aktA) V[i][j] = -2;
            else if(aktA<aktB) V[i][j] = -1;
 
        }
    }
  }
  return V;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...