[传智杯 #3 决赛] 课程
题目背景
disangan233 喜欢数数,于是他想让你帮他回答一个问题。
题目描述
传智专修学院提供A,B两个课程,分别有 n,m个学生报名。报名 A的学生的编号为 a_n,报名 B 的学生的编号为 b_m,求有多少个学生同时报名了两个课程。
对于所有数据,n,m,a_i,b_i<=20,保证每个课程报名的学生编号不会重复。
输入格式
输入共 3行。
第 1行输入2个正整数 n,m。
第 2行输入n个正整数 a_1...a_n,表示报名课程 A的学生编号。
第 3行输入 m个正整数 b_1...b_m,表示报名课程 B的学生编号。
**学生编号不保证从小到大排序。**
输出格式
输出共1行1个整数,表示答案。
样例
样例输入
5 5
1 2 3 4 5
1 3 4 5 6
样例输出
4
提示
样例解释
我们发现,1,3,4,5 这 4名学生同时报名了两门课程,所以答案是 4。
代码区:
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b){
return *(long int*)a-*(long int*)b;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int stun[n],stum[m];
for(int i=0;i<n;i++){
scanf("%d",&stun[i]);
}
for(int i=0;i<m;i++){
scanf("%d",&stum[i]);
}
qsort(stun,n,sizeof(int),cmp);
qsort(stum,m,sizeof(int),cmp);
int max=0,min=0;
if(stun[n-1]>stum[m-1]){
max=stun[n-1];
}
else{
max=stum[m-1];
}
if(stun[0]<stum[0]){
min=stun[0];
}
else{
min=stum[0];
}
int count[25]={0};
for(int i=0;i<n;i++){
count[stun[i]]++;
}
for(int i=0;i<m;i++){
count[stum[i]]++;
}
int ans=0;
for(int i=min;i<=max;i++){
if(count[i]==2){
ans++;
}
}
printf("%d",ans);
return 0;
}
欢迎各位读者提出意见。
(菜菜洛谷奋斗小日记)
标签:报名,洛谷,int,样例,P8833,课程,学生,输入 From: https://blog.csdn.net/2402_88149600/article/details/144037503