模拟 50 分求调
查看原帖
模拟 50 分求调
1030381
AFO_Lzx楼主2025/1/22 11:47

RT,对着题意模拟,但是只有 50 pts

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 1e3 + 5;
int n, m, k, a[maxn][maxn];
int sum[maxn], Max = INT_MIN, Min = INT_MAX;

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin >> n >> m >> k;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}

	while (k--) {
		memset(sum, 0, sizeof(sum));
		Min = INT_MAX, Max = INT_MIN;
		
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				sum[j] += a[i][j];
				
			}
		}
		
		for (int i = 1; i <= m; i++) {
			Min = min(Min, sum[i]);
			Max = max(Max, sum[i]);
		}
		vector<int> v;
		
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				if (sum[j] == Max) {
				//	cout << j << " ";
					v.push_back(a[i][j]);
					a[i][j] = 0;
				}
				
				if (sum[j] == Min) {
				//	cout << j << " ";
					v.push_back(a[i][j]);
					a[i][j] = 0;
				}
			}
		}
		
		//cout << endl;
		sort(v.begin(), v.end(), greater<int>());
	
		
		for (int i = n; i >= 1; i--) {
			if (i % 2 == 0) {
				for (int j = 1; j <= m; j++) {
					if (a[i][j] == 0) {
						a[i][j] = v.back();
						v.pop_back();
					}
				}
			} else {
				for (int j = m; j >= 1; j--) {
					if (a[i][j] == 0) {
						a[i][j] = v.back();
						v.pop_back();
					}
				}
			}
		}
	}
	
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}
2025/1/22 11:47
加载中...