Submission #1123891

#TimeUsernameProblemLanguageResultExecution timeMemory
1123891Trisanu_DasArchery (IOI09_archery)C++20
36 / 100
2096 ms8228 KiB
#include<bits/stdc++.h>
using namespace std;
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcount
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC
int get(vector <int> a, int x, int R) {
    if (a.size() == 2)
        return 0; 
    int n = a.size() / 2;             
    for (int t = 0; t < R; ++t) {
        for (int i = 0; i < a.size(); i += 2) {
            if (a[i] > a[i + 1])
                swap(a[i], a[i + 1]);
        }   
        if (a[0] == 0) {
            bool all2 = 1;
            for (int i = 1; i < 2 * n; i += 2) {
                if (a[i] != 2) {
                    all2 = 0;
                    break;
                }   
            }   
            if (all2) {
                int r = R - t;
                for (int i = 0; i < a.size(); ++i)
                    if (a[i] == x) {
                        int ans = i / 2;
                        ans -= r;
                        return (ans % n + n) % n;
                    }
            }            
            if (a[1] == 0 && a[0] != x && a[1] != x) {
                bool all0 = 1;
                for (int i = 0; i < 2 * n; i += 2) {
                    if (a[i]) {
                        all0 = 0;
                        break;
                    }   
                }   
                if (all0) {
                    for (int i = 0; i < a.size(); ++i) {
                        if (a[i] == x) {
                            return i / 2;
                        }   
                    }   
                }                
            }                 
        }    
        vector <int> b = a;
        b[1] = a[2];
        for (int i = 4; i < a.size(); i += 2) {
            b[i - 2] = a[i];            
        }   
        b[(int)b.size() - 2] = a[1]; 
        a = b;
    }    
    for (int i = 0; i < a.size(); ++i)
        if (a[i] == x)
            return i / 2;
}   
signed main() {
    #ifdef HOME
    freopen("input.txt", "r", stdin);
    #else
    #define endl '\n'
    ios_base::sync_with_stdio(0); cin.tie(0);
    #endif
    int n, R;
    cin >> n >> R;
 
    R %= n;
    R += 2 * n;
 
    int my;
    cin >> my;

    if (my == 1) {
        cout << n << endl;
        exit(0);
    }   

    vector <int> p(2 * n - 1);
    for (int i = 0; i < 2 * n - 1; ++i) {
        cin >> p[i];
        if (p[i] < my)
            p[i] = 0;
        else
            p[i] = 2;
    }            
    my = 1;

    int ans = 1e9;
    int start = -1;
 
    vector <int> nd(2 * n, -1);
    for (int i = 0; i < 2 * n; i += 2) {
        if (nd[i] == -1) {
            vector <int> t = p;
            t.insert(t.begin() + i, my);
            nd[i] = get(t, my, R);
        }   
        if (i && nd[i] > nd[i - 2])
            break;
        if (nd[i] < ans || (nd[i] == ans && i / 2 > start)) {
            ans = nd[i];
            start = i / 2;
        }   
    }   
    for (int i = 2 * n - 1; i >= 0; i -= 2) {
        if (nd[i] == -1) {
            vector <int> t = p;
            t.insert(t.begin() + i, my);
            nd[i] = get(t, my, R);
        }   
        if (i + 2 < 2 * n && nd[i] > nd[i + 2])
            break;
        if (nd[i] < ans || (nd[i] == ans && i / 2 > start)) {
            ans = nd[i];
            start = i / 2;
        }   
    }   
    cout << start + 1 << endl;
}

Compilation message (stderr)

archery.cpp: In function 'int get(std::vector<int>, int, int)':
archery.cpp:66:1: warning: control reaches end of non-void function [-Wreturn-type]
   66 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...