输入格式
输入包含两组数据,一组数据为cyn现有的课表,另一组为选课列表。
先输入正整数n,代表现有课表中的课程数,然后依次输入现有课程的数据(课程名称 周几 开始节次 结束节次)。如“计算理论 5 3 5”,代表《计算理论》这门课的上课时间为周五的3-5节。
接着输入正整数m,代表选课列表的行数,然后依次输入选课列表中的课程。
输出格式
输出能选上的课程数x,并按照选课列表的顺序打印课程名称。
样例输入content_copy
3
计算理论 5 3 5
人工智能 1 10 12
英语 3 6 7
7
羽毛球 2 3 5
绘画 2 3 5
电影欣赏 3 6 8
篮球 3 6 8
嵌入式开发 1 1 2
嵌入式开发 1 3 4
人工智能 1 10 12
样例输出content_copy
2
羽毛球
嵌入式开发
提示/说明
同一门课程可能会有多个不同时间的教学班,学校禁止学生重复选课!如《嵌入式开发》在周一的1-2和3-4都有,但它们是两个不同的教学班,一个学生不能同时报多个教学班,否则就是重复选课!
#include<algorithm>
#include <iostream>
#include<string>
#include<math.h>
#include<vector>
using namespace std;
int course[7][12]={0};
string newc[100];//将所有选的课加入课表
int main(){
int n;
cin>>n;
int count=0;
string name;
int week,start,end;
for(int i=0;i<n;i++)
{
cin>>name>>week>>start>>end;
for(int j=start-1;j<=end-1;j++)
{
course[week-1][j]=1;
}
newc[count++]=name;
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int flag=1;
cin>>name>>week>>start>>end;
for(int j=start-1;j<=end-1;j++)
{
if(course[week-1][j]==1)
{
flag=0;
break;
}
}
if(flag)
{
for(int i=0;i<count;i++)//判断是否重复选课
{
if(name==newc[i])
flag=0;
}
if(flag)
{
for(int j=start-1;j<=end-1;j++)
{
course[week-1][j]=1;
}
newc[count++]=name;
}
}
}
cout<<count-n<<endl;
for(int i=3;i<count;i++)
{
cout<<newc[i]<<endl;
}
}