算法知识点: 枚举,模拟

复杂度:

解题思路:

模拟从第 层走到第 层的整个过程,每次找出从当前房间开始第 个有梯子的房间即可。

最终每层遇到的 之和就是答案,不要忘记将答案对 取模。

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;
}


另外,牛客暑期NOIP真题班限时免费报名
报名链接:https://www.nowcoder.com/courses/cover/live/248
报名优惠券:DCYxdCJ