题目输入为第一行数字: N,M,T
此后的N行,每行M个数字。
此后T行,输入r1,r2,c1,c2,S,A
题目要求:对给定的一个N行M列的数组,进行T次局部排序,输出局部排序后数组。
排序规则为,对r1行到r2行的第c1列到第c2列的数据 根据指定的第S列进行排序,如果A==0则从小到大排序,A==1则从大到小排序。
输出排序后完整的数组。
例子:
输入:4 4 11 2 3 4 5 6 7 89 10 11 1213 14 15 162 3 2 3 3 1输出:1 2 3 4 5 10 11 89 6 7 1213 14 15 16
代码如下:通过率100%
#include <iostream>#include <algorithm>#include <vector>;using namespace std;bool compA1(vector<int> a, vector<int> b,int s) {return a[s] > b[s];}int main() {int N, M, T;cin >> N >> M >> T;vector<vector<int>> data(N);for (int i = 0; i < N;i++) {for (int j = 0; j < M; j++) {int num;cin >> num;data[i].push_back(num);}}while (T--) {int r1, r2, c1, c2;int s;int A;cin >> r1 >> r2 >> c1 >> c2 >> s >> A;int len = r2 - r1 + 1;int lenM = c2 - c1 + 1;r1 -= 1;c1 -= 1;vector<vector<int>> newdata(len);for (int i = 0; i < len;i++) {for (int j = 0; j < lenM;j++) {newdata[i].push_back(data[r1+i][c1+j]);}}s = s - c1-1;for (int i = 0; i < len;i++) {for (int j = i; j < len; j++) {if (A == 0) {if (newdata[i][s] > newdata[j][s]) {vector<int> tmp;tmp = newdata[i];newdata[i] = newdata[j];newdata[j] = tmp;}}else {if (newdata[i][s] < newdata[j][s]) {vector<int> tmp;tmp = newdata[i];newdata[i] = newdata[j];newdata[j] = tmp;}}}}for (int i = r1; i < r2;i++) {for (int j = c1; j < c2;j++) {data[i][j] = newdata[i - r1][j - c1];}}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {cout << data[i][j] << " ";}cout << endl;}return 0;}