算法知识点: 枚举,模拟
复杂度:
解题思路:
模拟从第 层走到第 层的整个过程,每次找出从当前房间开始第 个有梯子的房间即可。
最终每层遇到的 之和就是答案,不要忘记将答案对 取模。
C++ 代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 10010, M = 110, mod = 20123; int n, m, k; bool st[N][M]; int x[N][M]; int main() { scanf("%d%d", &n, &m); int res = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d%d", &st[i][j], &x[i][j]); scanf("%d", &k); for (int i = 0; i < n; i++) { int s = 0; for (int j = 0; j < m; j++) s += st[i][j]; int t = x[i][k]; res = (res + t) % mod; t %= s; if (!t) t = s; for (int j = k;; j = (j + 1) % m) { if (st[i][j]) { if (--t == 0) { k = j; break; } } } } printf("%d\n", res); return 0; }