欧克呀,竟然有这么多的人困在洛谷里面,正好我偷78被放出来了,今天就来拯救大家
玛丽游戏

#include <iostream>
using namespace std;
int main() {
    cout << R"(                ********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###            ###
                ...........               #...#          #...#
               ##*#######                 #.#.#          #.#.#
            ####*******######             #.#.#          #.#.#
           ...#***.****.*###....          #...#          #...#
           ....**********##.....           ###            ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############)" << endl;
    return 0;
}

过河卒

#include <iostream>
#include <cstring>
using namespace std;

const int N = 30; // 定义足够大的数组大小
long long dp[N][N]; // dp数组
bool control[N][N]; // 标记马的控制点

int main() {
    int n, m, x, y;
    cin >> n >> m >> x >> y;

    // 坐标偏移,避免边界问题
    n += 2, m += 2, x += 2, y += 2;

    // 标记马的控制点
    control[x][y] = true;
    int dx[] = {1, 1, 2, 2, -1, -1, -2, -2};
    int dy[] = {2, -2, 1, -1, 2, -2, 1, -1};
    for (int i = 0; i < 8; i++) {
        int nx = x + dx[i], ny = y + dy[i];
        if (nx >= 0 && ny >= 0 && nx <= n && ny <= m) {
            control[nx][ny] = true;
        }
    }

    // 初始化起点
    dp[2][2] = 1;

    // 动态规划递推
    for (int i = 2; i <= n; i++) {
        for (int j = 2; j <= m; j++) {
            if (control[i][j]) continue; // 跳过马的控制点
            dp[i][j] += dp[i-1][j] + dp[i][j-1];
        }
    }

    cout << dp[n][m] << endl;
    return 0;
}

2 条评论

  • @ 2025-3-15 21:00:31

    P1007 独木桥

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int L, N;
        cin >> L >> N;
    
        int min_time = 0, max_time = 0;
        for (int i = 0; i < N; i++) {
            int x;
            cin >> x;
    
            // 计算最短时间:士兵到最近端的时间
            int current_min = min(x, L + 1 - x);
            min_time = max(min_time, current_min);
    
            // 计算最长时间:士兵到最远端的时间
            int current_max = max(x, L + 1 - x);
            max_time = max(max_time, current_max);
        }
    
        cout << min_time << " " << max_time << endl;
        return 0;
    }
    
    • @ 2025-3-15 20:59:56

      [NOIP 2011 提高组] 铺地毯

      #include <iostream>
      using namespace std;
      
      const int N = 10010; // 定义足够大的数组大小
      
      struct Carpet {
          int a, b, g, k; // 地毯的左下角坐标和长度
      } carpets[N];
      
      int main() {
          int n;
          cin >> n;
          for (int i = 1; i <= n; i++) {
              cin >> carpets[i].a >> carpets[i].b >> carpets[i].g >> carpets[i].k;
          }
      
          int x, y;
          cin >> x >> y;
      
          int result = -1; // 初始化结果为-1
          for (int i = 1; i <= n; i++) {
              // 判断点(x, y)是否在当前地毯的范围内
              if (x >= carpets[i].a && x <= carpets[i].a + carpets[i].g &&
                  y >= carpets[i].b && y <= carpets[i].b + carpets[i].k) {
                  result = i; // 更新结果为当前地毯编号
              }
          }
      
          cout << result << endl;
          return 0;
      }
      
      • 1