发布题解

wangjiajian  •  2年前


首先,只需要定义一个结构体,存下来这一行(在结构体里我用了一个data数组)

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;

int n, m;

struct fucker {
    int data[510];
    inline bool operator < (const fucker &x) const {
        for(int i=1; i<=m; i++) {
            if(data[i] == x.data[i])
                continue;
            return data[i] < x.data[i];
        }
        return false;
    }
} a[510];

int main() {
    scanf("%d%d", &n, &m);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++)
            scanf("%d", &a[i].data[j]);
    }
    sort(a+1, a+1+n);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++)
            printf("%d ", a[i].data[j]);
        putchar('\n');
    }
    return 0;
}

评论:

归并版本

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;

int n, m;

struct fucker {
    int data[510];
    inline bool operator <= (const fucker &x) const {
        for(int i=1; i<=m; i++) {
            if(data[i] == x.data[i])
                continue;
            return data[i] < x.data[i];
        }
        return true;
    }
} a[510], b[510];

void guibing(int start,int end) {
    if(start >= end)
        return;

    int mid = (start+end)/2;
    guibing(start,mid);
    guibing(mid+1,end);

    int left_index = start;
    int right_index = mid+1;
    int t = start;
    while(left_index<=mid && right_index<=end) {
        if(a[left_index] <= a[right_index]) {
            b[t] = a[left_index];
            left_index++;
        } else {
            b[t] = a[right_index];
            right_index++;
        }
        t++;
    }

    while(left_index <= mid) {
        b[t] = a[left_index];
        t++;
        left_index++;
    }
    while(right_index <= end) {
        b[t] = a[right_index];
        t++;
        right_index++;
    }

    for(int i=start; i<=end; i++)
        a[i] = b[i];
    return;
}

int main() {
    scanf("%d%d", &n, &m);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++)
            scanf("%d", &a[i].data[j]);
    }
    guibing(1, n);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++)
            printf("%d ", a[i].data[j]);
        putchar('\n');
    }
    return 0;
}

wangjiajian  •  2年前

看懂题了??


ZZQ  •  2年前