刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

填涂颜色

题目描述:

给定一个由 n 行 m 列的小方格组成的矩阵图形,接下来对该图形进行如下操作:1、先选择其中 x 行,将其填成黄色;2、再选择其中 y 列,将其填成黄色;填色完成后,请统计出有多少个小方格未被填色。

例如:矩阵图形由 4 行 5 列的小方格组成,先选择第 2、4 行将其填色,再选择第 1、3、5 列将其填色。

填色完成后,有 4 个小方格未被填色。

输入描述:共三行

第一行输入 4 个整数 n,m,x,y,分别表示矩阵的行数和列数以及选择填色的行数和列数 (1≤x≤n≤10000,1≤y≤m≤10000),整数之间以一个空格隔开

第二行输入 x 个不同的整数(1≤整数≤n),表示被填色的行号,整数之间以一个空格隔开

第三行输入 y 个不同的整数(1≤整数≤m),表示被填色的列号,整数之间以一个空格隔开

输出描述:

输出一个整数,表示填色完成后未被填色的小方格数量


样例输入:

4 5 2 3
2 4
1 3 5

样例输出:

4

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```#include #include #include using namespace std;int countUncoloredSquares(int n, int m, int x, int y, vector& rows, vector& cols) unordered_set rowSet(rows.begin(), rows.end());unordered_set colSet(cols.begin(), cols.end());int count = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (rowSet.find(i) == rowSet.end() && colSet.find(j) == colSet.end()) {count++;}}}return count;int main() int n, m, x, y;cin >> n >> m >> x >> y;vector rows(x), cols(y);for (int i = 0; i < x; i++) {cin >> rows[i];}for (int i = 0; i < y; i++) {cin >> cols[i];}cout << countUncoloredSquares(n, m, x, y, rows, cols) << endl;return 0;```

解析:

【喵呜刷题小喵解析】:

这个问题可以通过遍历整个矩阵,然后检查每个方格是否被填色来解决。首先,我们需要将填色的行和列存储在unordered_set中,这样可以快速检查一个特定的行或列是否被填色。然后,我们遍历整个矩阵,对于每个方格,如果它的行和列都不在填色的集合中,那么这个方格就是未被填色的。

这个解决方案的时间复杂度是O(n*m),其中n是行数,m是列数。这是因为它需要遍历整个矩阵。空间复杂度是O(x+y),其中x是填色的行数,y是填色的列数。这是因为我们需要存储填色的行和列。

在C++中,我们可以使用unordered_set来存储填色的行和列,然后使用两个嵌套的循环来遍历整个矩阵。对于每个方格,我们检查它的行和列是否在填色的集合中,如果不在,我们就增加计数器。最后,我们返回计数器的值,即未被填色的方格数量。
创作类型:
原创

本文链接:填涂颜色 题目描述: 给定一个由 n 行 m 列的小方格组成的矩阵图形,接下来对该图形进行如下操作:

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share