1 条题解

  • 0
    @ 2024-12-24 10:06:20

    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
    上传者