Submission #908440

#TimeUsernameProblemLanguageResultExecution timeMemory
908440tosivanmakCave (IOI13_cave)C++17
0 / 100
167 ms1104 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
 
 
#ifdef __cplusplus
extern "C" {
#endif
int tryCombination(int S[]);
void answer(int S[], int D[]);
void exploreCave(int N);
#ifdef __cplusplus
}
#endif

// int N;
// int realS[5005],realD[5005],inv[5005];
// void answer(int S[], int D[]) {
//     int i;
//     int correct = 1;
//     for (i = 0; i < N; ++i){
//         if (S[i] != realS[i] || D[i] != realD[i]) {
//             correct = 0;
//             break;
//         }
//     }

//     if (correct){
//        cout<<"CORRECT\n";
//     }
//     else{
//        cout<<"INCORRECT\n";
//     }
//     for (i = 0; i < N; ++i) {
//         cout<<S[i]<<" ";
//     }
//    cout<<'\n';

//     for (i = 0; i < N; ++i) {
//         cout<<D[i]<<" ";
//     }
//     cout<<'\n';
// }

// int tryCombination(int S[]) {
//     int i;
//     for (i = 0; i < N; i++){
//         if (S[inv[i]] != realS[inv[i]]){
//             // cout<<S[inv[i]]<<" "<<realS[inv[i]]<<"\n";
//             return i;
//         }
//     }
//     return -1;
// }
vector<ll>cur;
int a[5005];
bool canuse[5005];
bool open[5005];
int refdoor[5005];
// TODO: global variables can be declared here
 
int ck(ll l, ll r){
    for(int i=l;i<=r;i++){
        a[cur[i]]^=1;
    }
    int lol=tryCombination(a);
    for(int i=l;i<=r;i++){
        a[cur[i]]^=1;
        }
    return lol;
}
void get(ll id){
    ll l=0,r=cur.size()-1;
    int compare=ck(1,0);
    cout<<compare<<'\n';
    while(l<=r){
        if(l==r){
            break;
        }
        else if(l==r-1){
          ll uiuiu=ck(l,l);
          cout<<l<<" "<<l<<" "<<uiuiu<<'\n';
            if((compare==id&&uiuiu!=compare) or (uiuiu==id&&uiuiu!=compare)){
                r=l;
            }
            else{
               l=r;
            }
            break;
        }
        else{
            ll mid=(l+r)>>1;
            int uiuiu=ck(l,mid);
            cout<<l<<" "<<mid<<" "<<uiuiu<<'\n';
            if((compare==id&&uiuiu!=compare) or (uiuiu==id&&uiuiu!=compare)){
                r=mid;
            }
            else{
               l=mid+1;
            }
        }
    }
    if(compare==id){
        open[cur[l]]=0;
        a[cur[l]]=0;
    }
    else{
        open[cur[l]]=1;
        a[cur[l]]=1;
    }
    refdoor[cur[l]]=id;
    canuse[cur[l]]=0;
}
void exploreCave(int N) {
  // TODO: implementation
    int n=N;
    for(int i=0;i<n;i++){
        a[i]=1;
        canuse[i]=1;
        cur.push_back(i);
    }
  for(int i=0;i<n;i++){
      get(i);
      cur.clear();
      for(int j=0;j<n;j++){
          if(canuse[j]){
              cur.push_back(j);
          }
      }
    //   for(auto& u: cur){
    //       cout<<u<<" ";
    //   }
    //   cout<<"\n\n\n\n\n";
  }
    int state[n],ref[n];
    for(int i=0;i<n;i++){
        state[i]=open[i];
        // cout<<state[i]<<" ";
        ref[i]=refdoor[i];
    }
    // for(int i=0;i<n;i++){
    //     cout<<ref[i]<<" ";
    // }
    answer(state,ref);
}

// int main(){
//     ios::sync_with_stdio(0);
//     cin.tie(0); cout.tie(0);
//     cin>>N;
//     for(int i=0;i<N;i++){
//         cin>>realS[i];
//     }
//     for(int i=0;i<N;i++){
//         cin>>realD[i];
//         inv[realD[i]]=i;
//     }
//     exploreCave(N);
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...