牛客網 翻轉矩陣

題目:https://www.nowcoder.com/questionTerminal/d2668179a15c49e4b1af2c31dc6fedb7

當時沒分析出來是個貪心,上來就上了兩個暴力,都不能全過kase/(ㄒoㄒ)/~~

//貪心
#include<bits/stdc++.h>
 
using namespace std;


int a[55][55];
int main() {
	int m, n, k;
	char str[50];
	cin >> m >> n >> k;
	for (int i = 0; i < m; i++) {
		cin >> str;
		for (int j = 0; j < n; j++)
			a[i][j] = str[j] - '0';
	}
	while (k) {
		vector<int> r(m);
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (a[i][j] == 0) {
					r[i]++;
				}

			}
		}
		vector<int> tempr;
		for (int i = 0; i < r.size(); i++) {
			if (k >= r[i] && k % 2 == r[i] % 2) {
				tempr.push_back(i);
			}
		}
		vector<int> tempc(n);
		for (int j = 0; j < n; j++) {
			for (int i : tempr) {
				if (a[i][j] == 0)
					tempc[j]++;
			}
		}
		int idx = max_element(tempc.begin(), tempc.end()) - tempc.begin();
		for (int i = 0; i < m; i++) {
			a[i][idx] = !a[i][idx];
		}
		k--;
	}
	int ans = 0;
	for (int i = 0; i < m; i++) {
		int ok = 1;
		for (int j = 0; j < n; j++) {
			if (a[i][j] == 0) {
				ok = 0;
				break;
			}
		}
		if (ok) ans++;
	}
	cout << ans << endl;
	return 0;
}
//6 5 3
//10010
//11000
//01110
//00011
//10101
//11000
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章