C# 算法:计算安全格子数量
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);
}
}
}
代码解析:
- 读取输入数据,包括地图大小 N、M 和 BOSS 选择的数量 Q。
- 创建一个二维数组 map 来表示地图,并初始化所有格子为安全(值为 1)。
- 遍历 BOSS 的选择,根据选择类型更新地图:
- 如果 BOSS 选择一整行,将对应行所有格子的值设置为 0(不安全)。
- 如果 BOSS 选择一整列,将对应列所有格子的值设置为 0(不安全)。
- 遍历地图,统计值为 1 的安全格子数量。
- 输出安全格子的数量。
该算法时间复杂度为 O(NM+Q),空间复杂度为 O(NM),可以满足题目要求。
注意:
- 输入数据需要符合题目的要求,包括大小范围和格式。
- 代码中使用 0 表示不安全格子,1 表示安全格子,可以根据实际情况调整。
- 该算法只是针对一个简单的场景,如果需要更复杂的功能,可以进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/pl30 著作权归作者所有。请勿转载和采集!