题目:https://codeforces.com/problemset/problem/1517/B
题目:让改变每一行使得每一列的最小数之和最小;
题解:对每一行sort,然后用rotate函数使得 i 行的最小数到第 i 个位置,其他排序不变。
注:rotate(first,mid,last ) 使得(first,mid-1)和(mid,last )互换位置。
//#include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long int ll;
int a[100][100];
int main()
{
int t;
cin >> t;
while (t--)
{
//记录数据
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> a[i][j];
}
sort(a[i], a[i] + m);
}
for (int i = m; i>0; i--)
{
int p = 0;
for (int j = 0; j < n; j++)
{
if (a[j][0] < a[p][0])
{
p = j;
}
}
//swap(a[p][0], a[p][i]);
rotate(a[p], a[p] + 1, a[p] + i);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
}