Submission #929057

# Submission time Handle Problem Language Result Execution time Memory
929057 2024-02-17T15:30:26 Z Foolestboy Cave (IOI13_cave) C++14
12 / 100
184 ms 640 KB
#ifndef GNORT
#include "cave.h"
#endif // GNORT
#include <bits/stdc++.h>

#define SQR(x)    (1LL * ((x) * (x)))
#define MASK(i)   (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define fi        first
#define se        second
#define pb        push_back
#define all(x)    x.begin(), x.end()
#define rall(x)   x.rbegin(), x.rend()
#define sz(s)     (int)s.size()
#define prev      __prev
#define next      __next
#define left      __left
#define right     __right

#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define vi vector<int>
#define vll vector<ll>

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int ui;

using namespace std;

const int mod = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);

const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};

template<class BUI, class TRONG>
    bool minimize(BUI &x, const TRONG y){
        if(x > y){
            x = y;
            return true;
        } else return false;
    }
template<class BUI, class TRONG>
    bool maximize(BUI &x, const TRONG y){
        if(x < y){
            x = y;
            return true;
        } else return false;
    }

/* Author : Bui Nguyen Duc Trong, Luong Van Chanh High School for the gifted*/
/* Template is copied by Trong */

                           /** Losing in Provincial Contests **/
                                    /** TRYING HARDER**/
                                   /**      ORZ     **/

/* -----------------[ MAIN CODE GOES HERE ]----------------- */

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

//#ifdef GNORT

//const int QUERY_LIMIT = 70000;
//
//struct Judger {
//    int n;
//    vector<int> perm, pos;
//
//    int queryCount, answerCount;
//
//    Judger() {
//        queryCount = 0;
//        n = 0;
//    }
//
//    void loadData(void) {
//        cin >> n;
//        perm.assign(n, 0);
//        pos.assign(n, 0);
//        for (int i = 0; i < n; i++) cin >> perm[i];
//        for (int i = 0; i < n; i++) cin >> pos[i];
//        queryCount = 0;
//        answerCount = 0;
//    }
//
//    int tryCombination(int s[]) {
//        printf("Try #%d:", queryCount + 1);
//        for (int i = 0; i < n; i++) printf(" %d", s[i]);
//        printf("\n");
//
//        assert(++queryCount < QUERY_LIMIT);
//        assert(answerCount == 0);
//        for (int i = 0; i < n; i++) assert(s[i] == 0 || s[i] == 1);
//
//        /// tinh ket qua
//
//        int res = 0;
//
//        printf("Returns: %d\n", res);
//        return res;
//    }
//
//    void answer(int s[], int d[]) {
//        assert(answerCount == 0);
//        for (int i = 0; i < n; i++) if (s[i] != perm[i]) {
//            printf("PERMUTATION WRONG ANSWER!\n");
//
//            printf("Expected:");
//            for (int j = 0; j < n; j++) printf(" %d", perm[j]);
//            printf("\n");
//
//            printf("Received:");
//            for (int j = 0; j < n; j++) printf(" %d", s[j]);
//            printf("\n");
//
//            exit(EXIT_FAILURE);
//        }
//        for (int i = 0; i < n; i++) assert(d[i] == pos[i]);
//        printf("CORRECT after %d queries\n", queryCount);
//    }
//} judger;
//
//int tryCombination(int s[]) {
//    return judger.tryCombination(s);
//}
//void answer(int s[], int d[]) {
//    return judger.answer(s, d);
//}
//
//#endif // GNORT

#ifdef GNORT

struct Jury{
    int n;
    vector<int> state, door;

    Jury() : n(0) {}

    void init(){
        cin >> n;
        state.resize(n);
        door.resize(n);
        for(int i = 0; i < n; i++) cin >> state[i];
        for(int i = 0; i < n; i++) cin >> door[i];
    }

    int tryCombination(int s[]){
        int ans = -1;
        for(int i = 0; i < n; i++) if(state[i] != s[i]){
            if(ans == -1) ans = door[i];
            else minimize(ans, door[i]);
        }
        cout << "Try:"; for(int i = 0; i < n; i++) cout << ' ' << s[i]; cout << '\n';
        cout << "res: " << ans << '\n';
        return ans;
    }

    void answer(int s[], int d[]){
        bool wa = 0;
        for(int i = 0; i < n; i++) wa |= (s[i] != state[i] || d[i] != door[i]);
        cout << "Jury state:";
        for(int x : state) cout << ' ' << x; cout << '\n';
        cout << "Jury door:";
        for(int x : door) cout << ' ' << x; cout << '\n';
        cout << "Trong state:";
        for(int i = 0; i < n; i++) cout << ' ' << s[i]; cout << '\n';
        cout << "Trong door:";
        for(int i = 0; i < n; i++) cout << ' ' << d[i]; cout << '\n';
        cout << (wa ? "WA" : "AC") << '\n';
    }

} jury;

int tryCombination(int s[]){
    return jury.tryCombination(s);
}

void answer(int s[], int d[]){
    jury.answer(s, d);
}

#endif // GNORT

bool quaduoc(int x, int y){
    return y == -1 || x < y;
}

// dau tien tim 0 || 1

void exploreCave(int n){
    vector<int> con(n);
    for(int i = 0; i < n; i++) con[i] = i;
    int thu[n];
    for(int i = 0; i < n; i++) thu[i] = 0;
    int ans1[n], ans2[n];
    for(int i = 0; i < n; i++){
        int c = quaduoc(i, tryCombination(thu)) ? thu[i] : thu[i] ^ 1;
        int lo = 0, hi = sz(con) - 1, pos = -1;
        while(lo <= hi){
            int mid = (lo + hi) >> 1;
            for(int j = 0; j <= mid; j++) thu[con[j]] = c;
            for(int j = mid + 1; j < sz(con); j++) thu[con[j]] = c ^ 1;
            if(quaduoc(i, tryCombination(thu))){
                hi = mid - 1;
                pos = mid;
            } else lo = mid + 1;
        }
//        if(pos == -1){
//            cout << "sai " << i << '\n';
//            return;
//        }
//        if(i == 2) cout << "huhu " << pos << ' ' << con[pos] << '\n';
        thu[con[pos]] = c;
        ans1[con[pos]] = c;
        ans2[con[pos]] = i;
        vector<int> tmp;
        for(int j = 0; j < pos; j++) tmp.push_back(con[j]);
        for(int j = pos + 1; j < sz(con); j++) tmp.push_back(con[j]);
        con = tmp;
    }
    answer(ans1, ans2);
}
/*
4
1 1 1 0
3 1 0 2
*/

#ifdef GNORT

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    const bool multitest = 0;
    int tt = 1; if(multitest) cin >> tt;

    while( tt-- ){

        jury.init();
        exploreCave(jury.n);

    }

    return 0;
}
#endif
# Verdict Execution time Memory Grader output
1 Correct 100 ms 604 KB Output is correct
2 Correct 101 ms 604 KB Output is correct
3 Correct 159 ms 636 KB Output is correct
4 Correct 111 ms 604 KB Output is correct
5 Correct 160 ms 604 KB Output is correct
6 Correct 162 ms 604 KB Output is correct
7 Correct 160 ms 604 KB Output is correct
8 Correct 0 ms 344 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 444 KB Output is correct
12 Correct 154 ms 640 KB Output is correct
13 Correct 152 ms 604 KB Output is correct
14 Correct 157 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 167 ms 604 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 178 ms 640 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Incorrect 184 ms 636 KB Answer is wrong
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 504 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Incorrect 1 ms 348 KB Answer is wrong
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 504 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Incorrect 1 ms 348 KB Answer is wrong
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 100 ms 604 KB Output is correct
2 Correct 101 ms 604 KB Output is correct
3 Correct 159 ms 636 KB Output is correct
4 Correct 111 ms 604 KB Output is correct
5 Correct 160 ms 604 KB Output is correct
6 Correct 162 ms 604 KB Output is correct
7 Correct 160 ms 604 KB Output is correct
8 Correct 0 ms 344 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 444 KB Output is correct
12 Correct 154 ms 640 KB Output is correct
13 Correct 152 ms 604 KB Output is correct
14 Correct 157 ms 640 KB Output is correct
15 Correct 167 ms 604 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 178 ms 640 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Incorrect 184 ms 636 KB Answer is wrong
21 Halted 0 ms 0 KB -