diff --git a/cpp/2204/220411.cpp b/cpp/2204/220411.cpp new file mode 100644 index 0000000..7aabfcb --- /dev/null +++ b/cpp/2204/220411.cpp @@ -0,0 +1,50 @@ +#include +#include + +/** + * 1260. Shift 2D Grid + * Given a 2D grid of size m x n and an integer k. You need to shift the grid k times. + * In one shift operation: + * Element at grid[i][j] moves to grid[i][j + 1]. + * Element at grid[i][n - 1] moves to grid[i + 1][0]. + * Element at grid[m - 1][n - 1] moves to grid[0][0]. + * Return the 2D grid after applying shift operation k times. + */ + +class Solution { +public: + static std::vector> shiftGrid(const std::vector>& grid, int k) { + int m = grid.size(), n = grid.front().size(); + int x = 0, y = 0; + k = m * n - (k % (m * n)) - 1; + while (k--) { + y = (1 + y) % n; + x = (y ? x : ((1 + x) % m)); + } + std::vector> ret(m); + for (int i = 0; i < m; ++i) { + auto& t = ret[i]; + t.reserve(n); + for (int j = 0; j < n; ++j) { + y = (1 + y) % n; + t.push_back(grid[x = (y ? x : ((1 + x) % m))][y]); + } + } + return ret; + } +}; + +int main() { + auto ret = Solution::shiftGrid({ + {1, 2, 3}, + {4, 5, 6}, + {7, 8, 9} + }, 9); + for (const auto& i : ret) { + for (const auto& j : i) { + std::printf("%d ", j); + } + std::printf("\n"); + } + return 0; +} diff --git a/cpp/2204/CMakeLists.txt b/cpp/2204/CMakeLists.txt index 2e12fe4..e69da70 100644 --- a/cpp/2204/CMakeLists.txt +++ b/cpp/2204/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2204) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2204 220411-CN.cpp) +ADD_EXECUTABLE(2204 220411.cpp)