C++解决'同行同列吃小鱼'问题:计算小蓝鲸最多能吃多少条鱼

这是一个经典的算法问题:在一个n*n的网格中,每格表示一个位置,其中可能存在一条小鱼。小蓝鲸每次可以吃掉一行或一列中的一条小鱼,但前提是这条小鱼的同行或同列上必须有其他小鱼存在。请问小蓝鲸最多能吃掉多少条小鱼?

以下是使用C++实现的解决方案:cpp#include #include <unordered_set>using namespace std;

int main() { int n; cin >> n; unordered_set row_set; unordered_set col_set; for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; row_set.insert(x); col_set.insert(y); } int row_count = row_set.size(); int col_count = col_set.size(); int max_fish = min(row_count, col_count); cout << max_fish << endl; return 0;}

代码思路:

  1. 使用两个unordered_set分别存储所有小鱼所在的行号和列号,利用哈希集合的特性避免重复计数。2. 统计行数和列数,取最小值即为小蓝鲸最多能吃掉的小鱼数量。这是因为每吃掉一条鱼,都会导致一行或一列的小鱼无法再被吃掉。

关于小蓝鲸吃掉一只小鱼后的影响:

题目中指出,小蓝鲸只有在一条小鱼的同行或同列上有其他小鱼存在时才能吃掉这条小鱼。然而,题目并没有说明小蓝鲸吃掉一条小鱼后,该位置是否还可以放置其他小鱼。因此,根据题目的描述,我们可以认为小蓝鲸吃掉一条小鱼后,该位置就不再有小鱼存在了,因为不再满足'同行或同列有其他小鱼'的条件。

C++解决'同行同列吃小鱼'问题:计算小蓝鲸最多能吃多少条鱼

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

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