问题就在于结构体中运算符的重载,我下载了第一个非AC的数据,结果本地运行出现了Expression:invalid comparator。但我不知道"<"的重载为什么有问题?
#include <iostream>
#include <algorithm>
using namespace std;
struct row {
int num;//数量
int i;//序号
//这个函数的意思:如果两个的num都>0,那么序号i小的就排在前面;否则num>0的排在前面
bool operator<(const row a)const {
if (this->num > 0 && a.num == 0)
return true;
else if (this->num > 0 && a.num > 0)
return this->i < a.i;
else if (this->num == 0 && a.num > 0)
return false;
else
return true;
}
};
struct column {
int num;
int i;
bool operator<(const column a)const {
if (this->num > 0 && a.num == 0)
return true;
else if (this->num > 0 && a.num > 0)
return this->i < a.i;
else if (this->num == 0 && a.num > 0)
return false;
else
return true;
}
};
int main() {
int m, n, k, l, d;
cin >> m >> n >> k >> l >> d;
row* p = new row[m];
column* q = new column[n];
//初始化
for (int i = 0; i < m; i++)
p[i].num = 0, p[i].i = 0x7fffff;
for (int i = 0; i < n; i++)
q[i].num = 0, q[i].i = 0x7fffff;
int x1, y1, x2, y2;
for (int i = 0; i < d; i++) {
cin >> x1 >> y1 >> x2 >> y2;
if (x1 == x2) {//列
int t = (y1 + y2) >> 1;
q[t - 1].i = t, q[t - 1].num++;
}
else if (y1 == y2) {//行
int t = (x1 + x2) >> 1;
p[t - 1].i = t, p[t - 1].num++;
}
}
//处理数据
sort(p, p + m);
sort(q, q + n);
cout << p[0].i;
for (int i = 1; i < k; i++) {
cout << " " << p[i].i;
}
cout << endl;
cout << q[0].i;
for (int i = 1; i < l; i++) {
cout << " " << q[i].i;
}
return 0;
}