好,本公子举一反三,研究出了三种必通发,不通,我提头见你

魈凯KBS  •  5个月前


第一种反归正距

include

include

include

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;

}


评论:

相比之下,第三种更为复杂,but还是通

include

include

include

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;

}


魈凯KBS  •  5个月前

第二种是最简洁,快速の

include <bits/stdc++.h>

using namespace std; const int N=2e5+10; int n,m; struct dp{

int a[510];

}k[510]; bool swp(dp x,dp y) {

for(int i=1;i<=m;i++)
{
	if(x.a[i]<y.a[i])
	{
		return 1;
	}
	else if(x.a[i]>y.a[i])
	{
		return 0;
	}
}

} int main() {

cin>>n>>m;
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		cin>>k[i].a[j];
	}
}
sort(k+1,k+n+1,swp);
for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		cout<<k[i].a[j]<<" ";
	}
	cout<<endl;
}
return 0;

}


魈凯KBS  •  5个月前


蔡悠然  •  4个月前