甲级PAT 1080 Graduate Admission (30 分)(排序)

测试1,2错误
找了两个多小时,发现里面的节点应该用原来的no也就是ap[i].no,而不是i

if (sc[ap[i].zy[j]][0] > 0||(ki[ap[i].zy[j]]!=1&& ap[ap[i].no].rank == ap[sc[ap[ap[i].no].zy[j]][ki[ap[ap[i].no].zy[j]] - 1]].rank))

最终代码:

#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
const int maxn = 40010;
int n;

struct appli {
	int ge, gi, sum;
	int zy[10];
	int rank, no;
	int flag;
}ap[maxn];

bool cmp(appli a, appli b) {
	if (a.sum != b.sum)return a.sum > b.sum;
	else return a.ge > b.ge;
}



int main() {
	int m, k, sc[110][10000], ki[110];
	cin >> n >> m >> k;
	for (int i = 0; i < m; i++)
	{
		ki[i] = 1;
		cin >> sc[i][0];
	}
	for (int i = 0; i < n; i++)
	{
		cin >> ap[i].ge >> ap[i].gi;
		ap[i].sum = ap[i].ge + ap[i].gi;
		ap[i].flag = 0; ap[i].no = i;
		for (int j = 0; j < k; j++)
		{
			cin >> ap[i].zy[j];
		}
	}

	sort(ap, ap + n, cmp);

	int rank = 1; ap[0].rank = 1;
	for (int i = 1; i < n; i++)
	{
		if (ap[i].sum != ap[i - 1].sum) { ap[i].rank = rank + 1; rank++; }
		else if (ap[i].ge != ap[i - 1].ge)
		{
			ap[i].rank = rank + 1; rank++;
		}
		else
		{
			ap[i].rank = ap[i - 1].rank; rank++;
		}
	}
	/*for (int i = 0; i < n; i++)
	{
		cout << ap[i].rank << ' ' << ap[i].ge << ' ' << ap[i].gi << ' ';
		for (int j = 0; j < k; j++)
		{
			cout << ap[i].zy[j] << ' ';
		}cout << endl;
	}*/

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < k; j++)
		{
			if (sc[ap[i].zy[j]][0] > 0||(ki[ap[i].zy[j]]!=1&& ap[ap[i].no].rank == ap[sc[ap[ap[i].no].zy[j]][ki[ap[ap[i].no].zy[j]] - 1]].rank))
			{
				sc[ap[i].zy[j]][0]--;
				sc[ap[i].zy[j]][ki[ap[i].zy[j]]++] = ap[i].no;
				ap[i].flag = 1;
				break;
			}

		}
	}	
	set<int> st;
	for (int i = 0; i < m; i++)
	{
		for (int j = 1; j < ki[i]; j++)
		{
			st.insert(sc[i][j]);
		}
		for (set<int>::iterator it = st.begin(); it != st.end(); it++)
		{

			cout << *it; ki[i]--;
			if (ki[i] != 1)
			{
				cout << ' ';
			}
		}
		cout << endl;
		st.clear();
	}

}
发布了6 篇原创文章 · 获赞 6 · 访问量 123

猜你喜欢

转载自blog.csdn.net/qq_41148778/article/details/104026158