Я готовлюсь к завершению программирования и PTA |100 设计 类 实验 辅助 教学 平台 - это вопрос неполного года.
Я провел сравнение с ответом других и до сих пор не знаю, что не так с моим кодом.Код в 1080.Выпускник приема (30) -PAT 甲级 真题 - 柳 婼 の блог проходит все отлично.
Проблема решается в основном с помощью сортировки, и я применил функцию sort.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct Applicant
{
int G_E; // GE
int G_T; // GT
int id;
int sum; // sum = G_E + G_T
int appliedSchools[7];
int rank;
};
struct School
{
int num = 0;
int admitedApplicants[40010];
};
bool cmp (struct Applicant School_A, struct Applicant School_B)
{
if (School_A.sum != School_B.sum)
return School_A.sum > School_B.sum;
else
return School_A.G_E > School_B.G_E;
}
bool cmpID(int A, int B)
{
if (A != B)
return A < B;
}
int quotaOfGraduateSchools[100];
struct Applicant applicants[40000];
int main ()
{
int N, M, K;
scanf("%d %d %d", &N, &M, &K);
for (int i = 0; i < M; ++i)
scanf("%d", "aOfGraduateSchools[i]);
for (int i = 0; i < N; ++i)
{
scanf("%d %d ", &applicants[i].G_E, &applicants[i].G_T);
applicants[i].sum = applicants[i].G_E + applicants[i].G_T;
applicants[i].id = i;
for (int j = 0; j < K; ++j)
scanf("%d", &applicants[i].appliedSchools[j]);
}
sort(applicants, applicants + N, cmp);
applicants[0].rank = 1;
for (int i = 1; i < N; ++i)
{
if (applicants[i].sum == applicants[i-1].sum && applicants[i].G_E == applicants[i-1].G_E)
applicants[i].rank = applicants[i-1].rank;
else
applicants[i].rank = i + 1;
}
struct School schools[M];
// for (int i = 0; i < N; ++i)
// printf("Rank = %d, ID = %d, school_1 = %d, school_2 = %d, school_3 = %d\n", applicants[i].rank, applicants[i].id, applicants[i].appliedSchools[0], applicants[i].appliedSchools[1], applicants[i].appliedSchools[2]);
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < K; ++j)
{
if (schools[applicants[i].appliedSchools[j]].num < quotaOfGraduateSchools[applicants[i].appliedSchools[j]])
{
schools[applicants[i].appliedSchools[j]].admitedApplicants[schools[applicants[i].appliedSchools[j]].num] = applicants[i].id;
++schools[applicants[i].appliedSchools[j]].num;
break;
}
else if (schools[applicants[i].appliedSchools[j]].num > 0 && applicants[schools[applicants[i].appliedSchools[j]].admitedApplicants[schools[applicants[i].appliedSchools[j]].num - 1]].rank == applicants[i].rank)
{
schools[applicants[i].appliedSchools[j]].admitedApplicants[schools[applicants[i].appliedSchools[j]].num] = applicants[i].id;
++schools[applicants[i].appliedSchools[j]].num;
break;
}
else
continue;
}
}
for (int i = 0; i < M; ++i)
{
if (schools[i].num == 0)
printf("\n");
else
{
sort(schools[i].admitedApplicants, schools[i].admitedApplicants + schools[i].num, cmpID);
printf("%d", schools[i].admitedApplicants[0]);
for (int j = 1; j < schools[i].num; ++j)
printf(" %d", schools[i].admitedApplicants[j]);
printf("\n");
}
}
return 0;
}