如何将这篇程序的运行时间控制到1000毫秒以内?
查看原帖
如何将这篇程序的运行时间控制到1000毫秒以内?
1213524
C_plus_plus_12345楼主2024/11/29 21:02
#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;

// 检查当前矩阵中是否有至少k个元素满足条件
int check_conditions(const vector<vector<int>>& matrix, int n, int m, int k)
{
	int count = 0;
	for (int i = 0; i < n; ++i)
	{
		int row_sum = accumulate(matrix[i].begin(), matrix[i].end(), 0);
		for (int j = 0; j < m; ++j)
		{
			int col_sum = 0;
			for (int r = 0; r < n; ++r)
			{
				col_sum += matrix[r][j];
			}
			if (matrix[i][j] >= row_sum + col_sum)
			{
				++count;
			}
		}
	}
	return count;
}

int min_minus_operations(vector<vector<int>>& matrix, int n, int m, int k)
{
	int minus_operations = 0;

	while (true)
	{
		// 检查当前矩阵是否满足条件
		int current_count = check_conditions(matrix, n, m, k);
		if (current_count >= k)
		{
			return minus_operations;
		}

		// 对矩阵进行minus操作
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j < m; ++j)
			{
				--matrix[i][j];
			}
		}
		++minus_operations;
	}
}

int main()
{
	int n, m, k;
	cin >> n >> m >> k;

	vector<vector<int>> matrix(n, vector<int>(m));
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < m; ++j)
		{
			cin >> matrix[i][j];
		}
	}

	int result = min_minus_operations(matrix, n, m, k);
	cout << result << endl;

	return 0;
}

我把这玩意扔进 B3811 里边,后面仨测试点全 TLE\color{00003F}{\text{TLE}} 了,求救

2024/11/29 21:02
加载中...