还会忘记考试吗"/>
T364887 小粉兔还会忘记考试吗
小粉兔还会忘记考试吗
题目描述
小粉兔在本学期共修读了 N N N 门课程,第 i i i 门课程的课程代码为 E i E_i Ei,每门课程都需要在结课后进行课程考试。
教务开始处理粉兔的成绩。教务共录入了 M M M 条成绩信息,一条成绩信息由课程代码和成绩组成。由于成绩可能存在调整,一门课程的成绩可能被重复录入,后录入的成绩将覆盖先录入的成绩。课程成绩在 60 60 60 分及以上,该门课程为及格;否则,为不及格。
由于粉兔记性很差,很可能忘记参加某些课程的课程考试。如果教务没有录入粉兔某门课程的成绩,则代表粉兔旷考了该门课程。旷考的课程亦为不及格。
小 F 就是这名教务,小 F 对粉兔旷考和不及格的门数非常感兴趣,请你帮助她统计。
输入格式
输入共 M + 2 M+2 M+2 行。
输入的第一行为两个整数 N , M N,M N,M。
输入的第二行为 N N N 个整数,第 i i i 个为 E i E_i Ei。
接下来 M M M 行,每行两个整数 P i , S i P_i,S_i Pi,Si, P i P_i Pi 表示课程代码, S i S_i Si 表示课程成绩。
输出格式
输出两行。
输出的第一行为一个整数,代表小粉兔旷考的课程数。
输出的第二行为一个整数,代表小粉兔不及格的课程数。
样例 #1
样例输入 #1
5 6
10 20 30 40 50
10 20
20 60
30 60
10 59
10 58
10 59
样例输出 #1
2
3
提示
对于 100 % 100\% 100% 的测试数据, 1 ≤ N , M ≤ 5 × 1 0 3 1 \le N,M \le 5 \times 10^3 1≤N,M≤5×103, 1 ≤ E i , P i ≤ 1 0 9 1 \le E_i,P_i \le 10^9 1≤Ei,Pi≤109, E i E_i Ei 互不相同, 0 ≤ S i ≤ 100 0 \le S_i \le 100 0≤Si≤100。 保证存在一个整数 j j j,使得 P i = E j P_i=E_j Pi=Ej。
1.首先,根据输入的 n,读入初始的课程数。
2.使用 score 这个 map 存储每门课程的成绩,初始时都设置为 0,表示尚未更新过成绩。
3.使用 kece 这个数组记录有哪些课程,初始状态都设置为 1,表示这些课程存在。
4.循环读入初始的课程编号,创建对应的键值对,表示这门课程的初始成绩为 0。
5.循环读入成绩更新的次数 m,每次读入更新的课程编号 E1 和成绩 S。
6.根据不同情况,根据题目要求更新课程成绩和旷考、挂科数目。具体逻辑已经在代码中用注释解释清楚。
7.输出旷考数 ku 和挂科数 lose。
#include <bits/stdc++.h>
using namespace std;
int main(){int n,m,E,E1,S;cin>>n>>m;int ku=n,lose=n,kece[1000]={0};//设最初旷考数和挂科数为nmap<int,int> score;for (int i = 0; i < n; ++i) {//创建键值对,并赋值0cin>>E;score[E]=0;kece[E]=1;//记录又哪些课程}for (int i = 0; i < m; ++i) {//循环输入每次课程的成绩cin>>E1>>S;score[E1]=S;if (S>=60&&kece[E1]==1){//表示第一次考了且通过了lose--;ku--;kece[E1]=2;}else if(S<60&&kece[E1]==1){//表示第一次考了,但没通过ku--;kece[E1]=3;}else if(S>=60&&kece[E1]==3){//表示不是第一次,但补考过了lose--;kece[E1]=2;}else if(S<60&&kece[E1]==2){//表示之前过了,但是后面又挂了lose++;kece[E1]=3;}}cout<<ku<<endl<<lose<<endl;return 0;
}
更多推荐
T364887 小粉兔还会忘记考试吗
发布评论