diff options
Diffstat (limited to 'works/life/2020-algorithm-contest/code')
| -rw-r--r-- | works/life/2020-algorithm-contest/code/1.cpp | 22 | ||||
| -rw-r--r-- | works/life/2020-algorithm-contest/code/2.cpp | 54 | ||||
| -rw-r--r-- | works/life/2020-algorithm-contest/code/3.cpp | 38 | ||||
| -rw-r--r-- | works/life/2020-algorithm-contest/code/4.cpp | 71 | ||||
| -rw-r--r-- | works/life/2020-algorithm-contest/code/5.cpp | 133 | 
5 files changed, 0 insertions, 318 deletions
diff --git a/works/life/2020-algorithm-contest/code/1.cpp b/works/life/2020-algorithm-contest/code/1.cpp deleted file mode 100644 index 1ae1783..0000000 --- a/works/life/2020-algorithm-contest/code/1.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include <iostream> -#include <set> - -int main() -{ -    int size; -    std::cin >> size; -    std::set<int> s; -    int v; -    for (int i = 0; i< size; i++) -    { -        std::cin >> v; -        s.insert(v); -    } - -    for (auto value : s) -    { -        std::cout << value << ' '; -    } - -    return 0; -} diff --git a/works/life/2020-algorithm-contest/code/2.cpp b/works/life/2020-algorithm-contest/code/2.cpp deleted file mode 100644 index 2d5fded..0000000 --- a/works/life/2020-algorithm-contest/code/2.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include <iostream> -#include <map> -#include <vector> -#include <algorithm> - -int main() -{ -    int size; -    std::cin >> size; -    int target; -    std::cin >> target; - -    std::map<int, int> nums; - -    for (int i = 0; i < size; i++) -    { -        int v; -        std::cin >> v; - -        nums[v]++; -    } - -    std::vector<int> counts; -    std::vector<std::vector<int>> sets; - -    for (const auto &pair : nums) -    { -        auto iter = std::lower_bound(counts.cbegin(), counts.cend(), pair.second); -        if (iter != counts.cend() && *iter == pair.second) -        { -            sets[iter - counts.cbegin()].push_back(pair.first); -        } -        else -        { -            const auto offset = iter - counts.cbegin(); -            counts.insert(iter, pair.second); -            sets.insert(sets.cbegin() + offset, std::vector<int>{pair.first}); -        } -    } - -    if (target > counts.size()) -    { -        std::cout << 0; -    } -    else -    { -        const auto &set = sets[counts.size() - target]; -        std::cout << set.size() << '\n'; -        for (auto i : set) -            std::cout << i << ' '; -    } - -    return 0; -} diff --git a/works/life/2020-algorithm-contest/code/3.cpp b/works/life/2020-algorithm-contest/code/3.cpp deleted file mode 100644 index 088cc5e..0000000 --- a/works/life/2020-algorithm-contest/code/3.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include <iostream> - -int main() -{ -    int length, numRows; -    std::cin >> length >> numRows; - -    if (numRows == 1) -    { -        for (int i = 1; i <= length; i++) -            std::cout << i << ' '; -        return 0; -    } - -    const int count_per_group = numRows * 2 - 2; -    for (int row = 0; row < numRows; row++) -    { -        if (row == 0) -        { -            for (int p = 0; p < length; p += count_per_group) -                std::cout << p + 1 << ' '; -        } -        else if (row == numRows - 1) -        { -            for (int p = row; p < length; p += count_per_group) -                std::cout << p + 1 << ' '; -        } -        else -        { -            bool former = true; -            const auto former_gap = count_per_group - row * 2; -            const auto latter_gap = count_per_group - former_gap; -            for (int p = row; p < length; p += (former ? former_gap : latter_gap), former = !former) -                std::cout << p + 1 << ' '; -        } -    } -    return 0; -} diff --git a/works/life/2020-algorithm-contest/code/4.cpp b/works/life/2020-algorithm-contest/code/4.cpp deleted file mode 100644 index 4ee94cb..0000000 --- a/works/life/2020-algorithm-contest/code/4.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include <iostream> -#include <vector> - -int calc(std::vector<std::vector<int>> &obstacleGrid) -{ - -    int R = obstacleGrid.size(); -    int C = obstacleGrid[0].size(); - -    // If the starting cell has an obstacle, then simply return as there would be -    // no paths to the destination. -    if (obstacleGrid[0][0] == 1) -    { -        return 0; -    } - -    // Number of ways of reaching the starting cell = 1. -    obstacleGrid[0][0] = 1; - -    // Filling the values for the first column -    for (int i = 1; i < R; i++) -    { -        obstacleGrid[i][0] = (obstacleGrid[i][0] == 0 && obstacleGrid[i - 1][0] == 1) ? 1 : 0; -    } - -    // Filling the values for the first row -    for (int i = 1; i < C; i++) -    { -        obstacleGrid[0][i] = (obstacleGrid[0][i] == 0 && obstacleGrid[0][i - 1] == 1) ? 1 : 0; -    } - -    // Starting from cell(1,1) fill up the values -    // No. of ways of reaching cell[i][j] = cell[i - 1][j] + cell[i][j - 1] -    // i.e. From above and left. -    for (int i = 1; i < R; i++) -    { -        for (int j = 1; j < C; j++) -        { -            if (obstacleGrid[i][j] == 0) -            { -                obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1]; -            } -            else -            { -                obstacleGrid[i][j] = 0; -            } -        } -    } - -    // Return value stored in rightmost bottommost cell. That is the destination. -    return obstacleGrid[R - 1][C - 1]; -} - -int main() -{ -    int row, column, bs; -    std::cin >> row >> column >> bs; - -    std::vector<std::vector<int>> grid(row, std::vector<int>(column, 0)); - -    for (int i = 0; i < bs; i++) -    { -        int r, c; -        std::cin >> r >> c; -        grid[r][c] = 1; -    } - -    std::cout << calc(grid); - -    return 0; -} diff --git a/works/life/2020-algorithm-contest/code/5.cpp b/works/life/2020-algorithm-contest/code/5.cpp deleted file mode 100644 index 24d3fd6..0000000 --- a/works/life/2020-algorithm-contest/code/5.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include <iostream> -#include <string> -#include <vector> -#include <cassert> - -enum class Op -{ -    Add, -    Sub, -    Mul, -    Div -}; - -struct OpInfo -{ -    explicit OpInfo(Op op) : op(op), count(0) {} - -    Op op; -    int count; // operand count -}; - -int main() -{ -    std::string expr; -    std::getline(std::cin, expr); - -    std::vector<int> operands; -    std::vector<OpInfo> op_infos; - -    for (auto c : expr) -    { -        if (c == '+') -        { -            op_infos.emplace_back(Op::Add); -        } -        else if (c == '-') -        { -            op_infos.emplace_back(Op::Sub); -        } -        else if (c == '*') -        { -            op_infos.emplace_back(Op::Mul); -        } -        else if (c == '/') -        { -            op_infos.emplace_back(Op::Div); -        } -        else if (c == '(') -        { -            if (!op_infos.empty()) -                op_infos.back().count++; -        } -        else if (c >= '0' && c <= '9') -        { -            operands.push_back(c - '0'); -            op_infos.back().count++; -        } -        else if (c == ')') -        { -            const auto &info = op_infos.back(); -            if ((info.op == Op::Sub || info.op == Op::Div) && info.count != 2) -            { -                std::cerr << "Sub or Div Op has not 2 operands."; -                return 1; -            } - -            switch (info.op) -            { -            case Op::Add: -            { -                int r = 0; -                for (int i = 0; i < info.count; i++) -                { -                    r += operands.back(); -                    operands.pop_back(); -                } -                operands.push_back(r); -                op_infos.pop_back(); -                break; -            } -            case Op::Sub: -            { -                int a = operands.back(); -                operands.pop_back(); -                int b = operands.back(); -                operands.pop_back(); -                operands.push_back(b - a); -                op_infos.pop_back(); -                break; -            } -            case Op::Mul: -            { -                int r = 1; -                for (int i = 0; i < info.count; i++) -                { -                    r *= operands.back(); -                    operands.pop_back(); -                } -                operands.push_back(r); -                op_infos.pop_back(); -                break; -            } -            case Op::Div: -            { -                int a = operands.back(); -                operands.pop_back(); -                int b = operands.back(); -                operands.pop_back(); -                operands.push_back(b / a); -                op_infos.pop_back(); -                break; -            } -            default: -                std::terminate(); -            } -        } -    } - -    if (operands.size() != 1) -    { -        std::cerr << "final operand count is not 1, but " << operands.size(); -        return 1; -    } -    if (!op_infos.empty()) -    { -        std::cerr << "final op_info is not empty"; -        return 1; -    } - -    std::cout << operands.front(); - -    return 0; -}  | 
