View Code of Problem 5

#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main() {
	int t,n,m;
	int* a=NULL,* b= NULL,*c= NULL;
	scanf("%d", &t);
	while (t-- > 0) {
		scanf("%d%d", &n,&m);
		void *new_ptr = realloc(a, n * sizeof(int));
		if (!new_ptr) {			
		}
		a = (int*)new_ptr;
		new_ptr = realloc(b, n * sizeof(int));
		if (!new_ptr) {
		}
		b = (int*)new_ptr;
		new_ptr = realloc(c, m * sizeof(int));
		if (!new_ptr) {
		}
		c = (int*)new_ptr;
		memset(c, 0, m * sizeof(int));
		for (int i = 0; i < n; i++) {
			scanf("%d%d", a + i, b + i);
			int j;
			for (j = 0; j < m&&c[j]!=0; j++) {
				if (a[i] > a[c[j] - 1]||(a[i] == a[c[j] - 1] && b[i]>b[c[j]-1])) {
					memmove(c + j + 1,c + j, (m - j - 1)*sizeof(int));
					c[j] = i + 1;
					break;
				}
			}
			if (c[j] == 0) {
				c[j] = i + 1;
			}
		}
		for (int i = 0; i < m; i++) {
			if (i == 0){
				printf("%d", c[i]);
			} else {
				printf(" %d", c[i]);
			}
		}
		if (t > 0) {
			printf("\n");
		}
	}
	free(a);
	free(b);
	free(c);
	return 0;
}

Double click to view unformatted code.


Back to problem 5