求助QAQ
查看原帖
求助QAQ
1144738
Eternally72楼主2024/5/4 18:03
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct people {
	long long sc, time, pos;
}p;
int compare(const void* p1, const void* p2)
{
	return ((*(int*)p1) - (*(int*)p2));
}
int compare_struct_sc(const void* p1, const void* p2) {
	return (((p*)p2)->sc - ((p*)p1)->sc+1 );
}
int compare_struct_time(const void* p1, const void* p2) {
	return (((p*)p1)->time - ((p*)p2)->time +1);
}
int main()
{
	int T;
	scanf("%d", &T);
	while (T--) {
		long long n, m, h;
		scanf("%lld%lld%lld", &n, &m, &h);
		p* people = (p*)malloc(sizeof(p) * n);

		for (long long i = 0; i < n; i++) {
			(people + i)->sc = 0;
			(people + i)->time = 0;
			(people + i)->pos = i + 1;

			long long qus[200005], sumt = 0;

			for (long long j = 0; j < m; j++)
				scanf("%lld", &qus[j]);
			qsort(qus, m, sizeof(long long), compare);
			long long x = 0;
			while (sumt + qus[x] <= h && x < m) {
				(people + i)->time += qus[x] + sumt;
				sumt += qus[x];
				x++;
				(people + i)->sc++;
			}
		}

		qsort(people, n, sizeof(p), compare_struct_sc);
		long long l1, r1, posi;
		for (int i = 0; i < n; i++) {
			if ((people + i)->pos == 1) {
				l1 = i;
				r1 = i;
				posi = i;
			}
		}
		while ((people + l1)->sc == (people + posi)->sc && l1 >= 0)
			l1--;
		while ((people + r1)->sc == (people + posi)->sc && r1 < n)
			r1++;
		qsort(people + l1 + 1, r1 - l1 - 1, sizeof(p), compare_struct_time);
		for (long long i = 0; i < n; i++) {
			if ((people + i)->pos == 1) {
				printf("%lld\n", i + 1);
				break;
			}
		}
		free(people);
	}
}
2024/5/4 18:03
加载中...