30pts求助
查看原帖
30pts求助
247992
_Cloud_楼主2020/11/5 21:39
#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 1005;

int read() {
	int x;
	char c = getchar();
	while (c < '0' || c > '9') c = getchar();
	for (x = 0; c >= '0'&& c <= '9';c = getchar())
		x = x * 10 + c - '0';
	return x;
}
int n, m, k, l, d;
int map[N][N];

struct Node {
	int num, id;
} h[N], z[N], ans1[N], ans2[N];

void work() {
	for (int i = 1; i < n; i++) {
		h[i].id = i;
		for (int j = 1; j <= m; j++) {//记录横向隔开的 
			if (map[i][j] == 0) continue;
			if (map[i][j] == map[i+1][j]) h[i].num++;
		}
	}
	for (int i = 1; i < m; i++) {//记录纵向隔开的 
		z[i].id = i;
		for (int j = 1; j <= n; j++) {
			if (map[j][i] == 0) continue;
			if (map[j][i] == map[j][i+1]) z[i].num++;
		}
	}
}

bool cmp(Node x, Node y) { return x.num > y.num; }
bool cmp2(Node x, Node y) { return x.id < y.id; }

int main() {
	
	n = read(), m = read(), k = read(), l = read(), d = read();
	for (int i = 1; i <= d; i++) {
		int x1, y1, x2, y2;
		x1 = read(), y1 = read(), x2 = read(), y2 = read();//读入 
		map[x1][y1] = i, map[x2][y2] = i;//记录交头接耳 
	}
	work();//记录h数组和z数组,h数组记录第i行与第i+1行隔开的人,z数组记录第j列与第j+1列隔开的人 
	sort(h + 1, h + n, cmp);
	sort(z + 1, z + m, cmp);
//	for (int i = 1; i <= n; i++) printf("h[%d]=%d ", i, h[i].num);
//	printf("\n");
//	for (int i = 1; i <= m; i++) printf("z[%d]=%d ", i, z[i].num);
//	printf("\n");
//	int ans = 0;
//	for (int i = 1; i <= k; i++) ans += h[i].num;
//	for (int j = 1; j <= l; j++) ans += z[j].num;
//	printf("%d\n", ans);
	for (int i = 1; i <= k; i++) ans1[i] = h[i];//取前k个 
	for (int i = 1; i <= l; i++) ans2[i] = z[i];//取前l个 
	sort(ans1 + 1, ans1 + 1 + k, cmp2);
	sort(ans2 + 1, ans2 + 1 + l, cmp2);
	printf("%d", ans1[1].id);
	for (int i = 2; i <= k; i++) printf(" %d", ans1[i].id);
	printf("\n");
	printf("%d", ans2[1].id);
	for (int i = 2; i <= l; i++) printf(" %d", ans2[i].id);
	printf("\n");
	return 0;
}
2020/11/5 21:39
加载中...