请问以下代码的读入的纵列预处理有何问题
// ----- 贪心 扫描K行,L 列
#define DEBUG
#include <cstdio>
#include <algorithm>
int M,N,K,L,D;
const int Max = 1000 + 5;
struct Line{
int cnt,Id;
bool operator< (const Line& a) const {
return cnt > a.cnt;
}
#ifdef DEBUG
void print() {
printf("(cnt:%d Id:%d)",cnt,Id);
}
#endif
};
Line A[Max],B[Max]; //添加的效率 A :行;B : 列
/*1 means who will spaek
0 0 0 0 0
1 1 0 0 0
|
|
A[0]++
0 0 0 0 0
0 0 0 0 1>>B[2]++
0 0 0 0 1
.
.
.
*/
#ifdef DEBUG
void dp(Line* a,int n) {
for (int i = 0;i < n; ++i) a[i].print();
puts("};");
}
#endif
int main() {
/*
#ifdef DEBUG
freopen("in.txt","r",stdin);
#endif
*/
scanf("%d%d%d%d%d",&M,&N,&K,&L,&D);
for (int i = 0;i < D; ++i) {
int x,y,p,q; // in text says X Y P Q
scanf("%d%d%d%d",&x,&y,&p,&q);
if (x == p){
A[x - 1].cnt++;
A[x - 1].Id = x;
} else {
B[x - 1].cnt++;
B[x - 1].Id = y;
}
}
#ifdef DEBUG
printf("A:{");
dp(A,M);
#endif
#ifdef DEBUG
printf("B:{");
dp(B,N);
#endif
// reading finally
std::sort(A,A + M);
#ifdef DEBUG
printf("A:{");
dp(A,M);
#endif
std::sort(B,B + N);
#ifdef DEBUG
printf("B:{");
dp(B,N);
#endif
// the beginning
// for Down
for (int i = K;i > 0; --i) printf("%d ",(A + i)->Id);
puts("");
//for Line
for (int i = L;i > 0; --i) printf("%d ",(B + i)->Id);
// DONE
return 0;
}
```
本菜鸟认为问题出在第54行的else语句后!!!###
so I did that:
- 写了一堆预处理器