1047 Student List for Course (25分)

1047 Student List for Course (25分)
题目链接

题目描述:
题目描述
Sample Input:

10 5
ZOE1 2 4 5
ANN0 3 5 2 1
BOB5 5 3 4 2 1 5
JOE4 1 2
JAY9 4 1 2 5 4
FRA8 3 4 2 5
DON2 2 4 5
AMY7 1 5
KAT3 3 5 4 2
LOR6 4 2 4 1 5

Sample Output:

1 4
ANN0
BOB5
JAY9
LOR6
2 7
ANN0
BOB5
FRA8
JAY9
JOE4
KAT3
LOR6
3 1
BOB5
4 7
BOB5
DON2
FRA8
JAY9
KAT3
LOR6
ZOE1
5 9
AMY7
ANN0
BOB5
DON2
FRA8
JAY9
KAT3
LOR6
ZOE1

方法1:(设置一个并行数组,每次存进去人名的标号,然后记录人名,输出的时候利用人名标号找到相应的人名)

#include <bits/stdc++.h>

using namespace std;

vector<int>a[2600];
char str[41000][5];

bool cmp(int a,int b)
{
    if(strcmp(str[a],str[b])<0)
        return true;
    else
        return false;
}

int main()
{
    int n,m,i,j,x,y;
    scanf("%d%d",&n,&m);
    for(i=0; i<n; i++)
    {
        scanf("%s %d",str[i],&x);
        while(x--)
        {
            scanf("%d",&y);
            a[y].push_back(i);
        }
    }
    for(i=1; i<=m; i++)
    {
        printf("%d %d\n",i,a[i].size());
        sort(a[i].begin(),a[i].end(),cmp);
        for(j=0; j<a[i].size(); j++)
            printf("%s\n",str[a[i][j]]);
    }
    return 0;
}

方法二:(把人名化成数字存起来,然后输出的时候再把数字转化成相应的人名)

#include <bits/stdc++.h>

using namespace std;

vector<int>a[26*26*26+15];

bool cmp(int a,int b)
{
    return a<b;
}

int get_id(char str[])
{
    int id=0,i;
    for(i=0; i<3; i++)
        id=id*26+str[i]-'A';
    id=id*10+str[3]-'0';
    return id;
}


int main()
{
    int n,m,i,j,x,y;
    char str[5];
    scanf("%d%d",&n,&m);
    for(i=0; i<n; i++)
    {
        scanf("%s %d",str,&x);
        while(x--)
        {
            scanf("%d",&y);
            int id=get_id(str);
            a[y].push_back(id);
        }
    }
    for(i=1; i<=m; i++)
    {
        printf("%d %d\n",i,a[i].size());
        sort(a[i].begin(),a[i].end(),cmp);
        for(j=0; j<a[i].size(); j++)
        {
            printf("%c",a[i][j]/10/26/26%26+'A');
            printf("%c",a[i][j]/10/26%26+'A');
            printf("%c",a[i][j]/10%26+'A');
            printf("%c",a[i][j]%10+'0');
            printf("\n");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python代码实现: ```python class Student: def __init__(self, name, id): self.name = name self.id = id self.courses = [] def enroll(self, course): self.courses.append(course) def drop(self, course): self.courses.remove(course) def list_courses(self): print(f"{self.name}'s courses:") for course in self.courses: print(course.name) class Course: def __init__(self, name, teacher): self.name = name self.teacher = teacher self.students = [] def add_student(self, student): self.students.append(student) student.enroll(self) def remove_student(self, student): self.students.remove(student) student.drop(self) def list_students(self): print(f"Students enrolled in {self.name}:") for student in self.students: print(student.name) class Teacher: def __init__(self, name, id): self.name = name self.id = id self.courses = [] def add_course(self, course): self.courses.append(course) def remove_course(self, course): self.courses.remove(course) def list_courses(self): print(f"{self.name}'s courses:") for course in self.courses: print(course.name) ``` 使用示例: ```python # 创建学生、课程和教师实例 alice = Student("Alice", 1) bob = Student("Bob", 2) math = Course("Math", Teacher("Mr. Smith", 101)) english = Course("English", Teacher("Mrs. Johnson", 102)) mr_jones = Teacher("Mr. Jones", 103) # 学生选课 math.add_student(alice) math.add_student(bob) english.add_student(alice) # 教师管理课程 mr_jones.add_course(math) mr_jones.add_course(english) # 列出学生和课程信息 alice.list_courses() # Alice's courses: Math, English bob.list_courses() # Bob's courses: Math math.list_students() # Students enrolled in Math: Alice, Bob english.list_students() # Students enrolled in English: Alice mr_jones.list_courses() # Mr. Jones's courses: Math, English # 学生退课 math.remove_student(bob) bob.list_courses() # Bob's courses: math.list_students() # Students enrolled in Math: Alice ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值