CSES - Aalto Competitive Programming 2024 - wk3 - Mon - Results
Submission details
Task:Wario kart I
Sender:odanobunaga8199
Submission time:2024-09-16 16:54:59 +0300
Language:C++20
Status:COMPILE ERROR

Compiler report

input/code.cpp: In lambda function:
input/code.cpp:25:12: error: 'pos' was not declared in this scope; did you mean 'pow'?
   25 |         if(pos + delta < track_length){
      |            ^~~
      |            pow
input/code.cpp:41:18: warning: unused variable 'found' [-Wunused-variable]
   41 |             bool found = false;
      |                  ^~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:67:24: error: 'pos' was not declared in this scope; did you mean 'pow'?
   67 |         int new_pos = (pos + delta) % track_length;
      |                        ^~~
      |                        pow

Code

#include <bits/stdc++.h>
using namespace std;


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, m, k;
    cin >> n >> m >> k;
    vector<int> a(m);
    for(auto &x: a){
        cin >> x;
        x *= 100;
    }
    sort(a.begin(), a.end());
    int track_length = n * 100;
    if(k ==0){
        cout << 0;
        return 0;
    }
    auto has_boost_in_range = [&](int current_pos, int delta) -> bool{
        if(delta ==0){
            return false;
        }
        if(pos + delta < track_length){
            int lower = current_pos +1;
            int upper = current_pos + delta;
            int idx = lower_bound(a.begin(), a.end(), lower) - a.begin();
            if(idx < m && a[idx] <= upper){
                return true;
            }
            else{
                return false;
            }
        }
        else{
            int lower1 = current_pos +1;
            int upper1 = track_length -1;
            int lower2 = 0;
            int upper2 = (pos + delta) % track_length;
            bool found = false;
            if(lower1 <= upper1){
                int idx1 = lower_bound(a.begin(), a.end(), lower1) - a.begin();
                if(idx1 < m && a[idx1] <= upper1){
                    return true;
                }
            }
            if(lower2 <= upper2){
                int idx2 = lower_bound(a.begin(), a.end(), lower2) - a.begin();
                if(idx2 < m && a[idx2] <= upper2){
                    return true;
                }
            }
            return false;
        }
    };
    int current_pos =0;
    bool boost_active = false;
    for(int sec=1; sec<=k; sec++){
        int delta;
        if(boost_active){
            delta =200;
        }
        else{
            delta =100;
        }
        int new_pos = (pos + delta) % track_length;
        bool next_boost_active = false;
        if(!boost_active){
            if(has_boost_in_range(pos, delta)){
                next_boost_active = true;
            }
        }
        current_pos = new_pos;
        boost_active = next_boost_active;
    }
    cout << current_pos;
}