CSES - Datatähti 2025 alku - Results
Submission details
Task:Robotti
Sender:SillyBilly
Submission time:2024-11-01 13:44:34 +0200
Language:C++ (C++17)
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:58:48: error: cannot convert 'std::vector<int>::iterator' to 'const char*'
   58 |         coinloc.erase(std::remove(coinloc.begin(), coinloc.end(), robotPos), coinloc.end());
      |                                   ~~~~~~~~~~~~~^~
      |                                                |
      |                                                std::vector<int>::iterator
In file included from /usr/include/c++/11/cstdio:42,
                 from /usr/include/c++/11/ext/string_conversions.h:43,
                 from /usr/include/c++/11/bits/basic_string.h:6608,
                 from /usr/include/c++/11/string:55,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/ostream:38,
                 from /usr/include/c++/11/iostream:39,
                 from input/code.cpp...

Code

#include <iostream>
#include <vector>
#include <string>
#include <cmath>

int main() {
    int n;
    std::string rooms;
    std::cin >> n >> rooms;

    int robotPos = rooms.find('R');
    
    std::vector<int> coinloc;
    for (int i = 0; i < n; ++i) {
        if (rooms[i] == '*') {
            coinloc.push_back(i);
        }
    }
    int steps = 0;
    int coins = 0;

    while (!coinloc.empty()) {
        int Left = -1;
        int Right = -1;

        for (int pos : coinloc) {
            if (pos < robotPos) {
                Left = pos;
            } else if (pos > robotPos && Right == -1) {
                Right = pos;
                break;
            }
        }

        if (Left == -1 && Right == -1) {
            break;
        } else if (Left == -1) {
            steps += std::abs(robotPos - Right);
            robotPos = Right;
        } else if (Right == -1) {
            steps += std::abs(robotPos - Left);
            robotPos = Left;
        } else {
            int distLeft = std::abs(robotPos - Left);
            int distRight = std::abs(robotPos - Right);
            if (distLeft < distRight) {
                steps += distLeft;
                robotPos = Left;
            } else if (distRight < distLeft) {
                steps += distRight;
                robotPos = Right;
            } else {
                break;
            }
        }

        coins++;
        coinloc.erase(std::remove(coinloc.begin(), coinloc.end(), robotPos), coinloc.end());
    }
    std::cout<< steps<<" "<<coins<<std::endl;
}