1 条题解
-
0
C :
#include<stdio.h> #include<string.h> #include <stdlib.h> #define MaxName 4 #define MaxC 20 typedef struct ListNode *List; struct ListNode { char Name[MaxName+1]; List Next; }; struct StudentNode { char Name[MaxName+1]; int nC; int C[MaxC]; } *Student; struct CourseNode { int Counter; List Ptr; } *Course; int CmpName(const void *a, const void *b) { return strcmp(((const struct StudentNode*)a)->Name, ((const struct StudentNode*)b)->Name); } void Read_and_Sort( int *N, int *K ) { int i, j; scanf("%d %d\n", N, K); Student = malloc( sizeof( struct StudentNode ) * (*N) ); Course = malloc( sizeof( struct CourseNode ) * (*K) ); for (i=0; i<(*K); i++) { Course[i].Counter = 0; Course[i].Ptr = NULL; } for (i=0; i<(*N); i++) { scanf("%s %d", Student[i].Name, &Student[i].nC); for (j=0; j<Student[i].nC; j++) scanf("%d", &Student[i].C[j]); } qsort(Student, (*N), sizeof(struct StudentNode), CmpName); } List NewNode( char *name ) { List temp; temp = (List)malloc(sizeof(struct ListNode)); strcpy(temp->Name, name); temp->Next = NULL; return temp; } void InsertCourse( int N, int K ) { List Node; int i, j, CourseIndex; for (i=N-1; i>=0; i--) for (j=Student[i].nC-1; j>=0; j--) { CourseIndex = Student[i].C[j]-1; Node = NewNode(Student[i].Name); Node->Next = Course[CourseIndex].Ptr; Course[CourseIndex].Ptr = Node; Course[CourseIndex].Counter ++; } } void Output( int K ) { List Ptr; int i; for (i=0; i<K; i++) { printf("%d %d\n", i+1, Course[i].Counter); for (Ptr = Course[i].Ptr; Ptr; Ptr = Ptr->Next) printf("%s\n", Ptr->Name); } } int main() { int N, K; Read_and_Sort( &N, &K ); InsertCourse( N, K ); Output( K ); return 0; }
C++ :
#include<cstdio> #include<algorithm> #include<vector> using namespace std; const int MAX=2510; vector<int> course[MAX]; //string to number int S2N(char str []) { int sum=0; for(int i=0;i<3;i++) { sum=sum*26+str[i]-'A'; } sum=sum*10+str[3]-'0'; return sum; } void N2S(int num,char str[]) { str[4]='\0'; str[3]=num%10+'0'; num/=10; for(int i=2;i>=0;i--) { str[i]=num%26+'A'; num/=26; } } int main(int argc, char *argv[]) { int N,M; scanf("%d%d",&N,&M); for(int i=0;i<N;i++) { char temp[6]; scanf("%s",temp); int index=S2N(temp); int count; scanf("%d",&count); for(int j=0;j<count;j++) { int num; scanf("%d",&num); course[num].push_back(index); } } for(int i=1;i<=M;i++) { sort(course[i].begin(),course[i].end()); printf("%d %d\n",i,course[i].size()); for(int j=0;j<course[i].size();j++) { char temp[6]; N2S(course[i][j],temp); printf("%s\n",temp); } } return 0; }
- 1
信息
- ID
- 2711
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者