C# 算法:计算安全格子数量

该算法使用 C# 语言,计算一个 N 行 M 列的地图中安全格子的数量。地图中每个格子初始为安全,BOSS 会选择若干行或列将其标记为不安全,算法需要统计最终地图中剩余的安全格子数量。

输入格式:

输入第一行是三个整数 N、M、Q(1≤N×M≤10^5,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量;接下来 Q 行,每行两个数 Ti、Ci,其中 Ti=0 表示 BOSS 选择的是一整行,Ti=1 表示选择的是一整列,Ci 为选择的行号/列号;行和列的编号均从 1 开始。

输出格式:

输出一个数,表示安全格子的数量。

示例输入:

3 4 2
0 1
1 2

示例输出:

8

C# 代码:

using System;

namespace SafeGrids
{
    class Program
    {
        static void Main(string[] args)
        {
            // 读取输入
            string[] input = Console.ReadLine().Split(' ');
            int n = int.Parse(input[0]);
            int m = int.Parse(input[1]);
            int q = int.Parse(input[2]);

            // 创建一个二维数组表示地图
            int[,] map = new int[n, m];

            // 初始化地图为安全格子
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    map[i, j] = 1; // 1表示安全格子
                }
            }

            // 根据BOSS的选择更新地图
            for (int i = 0; i < q; i++)
            {
                string[] query = Console.ReadLine().Split(' ');
                int t = int.Parse(query[0]);
                int c = int.Parse(query[1]);

                if (t == 0)
                {
                    // BOSS选择一整行
                    for (int j = 0; j < m; j++)
                    {
                        map[c - 1, j] = 0; // 0表示不安全格子
                    }
                }
                else if (t == 1)
                {
                    // BOSS选择一整列
                    for (int j = 0; j < n; j++)
                    {
                        map[j, c - 1] = 0; // 0表示不安全格子
                    }
                }
            }

            // 统计安全格子的数量
            int safeGrids = 0;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (map[i, j] == 1)
                    {
                        safeGrids++;
                    }
                }
            }

            // 输出结果
            Console.WriteLine(safeGrids);
        }
    }
}

代码解析:

  1. 读取输入数据,包括地图大小 N、M 和 BOSS 选择的数量 Q。
  2. 创建一个二维数组 map 来表示地图,并初始化所有格子为安全(值为 1)。
  3. 遍历 BOSS 的选择,根据选择类型更新地图:
    • 如果 BOSS 选择一整行,将对应行所有格子的值设置为 0(不安全)。
    • 如果 BOSS 选择一整列,将对应列所有格子的值设置为 0(不安全)。
  4. 遍历地图,统计值为 1 的安全格子数量。
  5. 输出安全格子的数量。

该算法时间复杂度为 O(NM+Q),空间复杂度为 O(NM),可以满足题目要求。

注意:

  • 输入数据需要符合题目的要求,包括大小范围和格式。
  • 代码中使用 0 表示不安全格子,1 表示安全格子,可以根据实际情况调整。
  • 该算法只是针对一个简单的场景,如果需要更复杂的功能,可以进行相应的修改。
C# 算法:计算安全格子数量

原文地址: https://www.cveoy.top/t/topic/pl30 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录