有道例题,很多地方不明白,请大佬指教,万分感谢!
中考成绩出来了,许多考生想知道自己成绩排名,考试委员会找到你,希望你能完成一个成绩查找程勋,考生只需要输入成绩,即可知道其排名和同分数人数输入格式1行数N(N<=10000),2行为一个数K,3行为N个以空格隔开从大到小的所有考生成绩(整数),接着K个待查找的考生成绩
输入样例:10
2
580 570 565 564 564 534 534 534 520 520
564 520
输出样例:4 2 3
6 2 8
程序如下:
1 #include<iostream>
2 #include<cstring>
3 const int MAXN=10010;
4 using namespace std;
5 int main()
6 {
7 int a[MAXN],b[MAXN],s[MAXN];
8 int mark,temp=-1,n,k,x,low,high,mid=0,rank=0;
9 cin>>n>>k;
10 memset(b,0,sizeof(0));
11 for(int i=1;i<=n;i++)
12 {
13 cin>>mark;
14 if(mark==temp) b[rank]+=1;
15 else
16 {
17 a[++rank]=mark;
18 s[rank]=i-1;
19 b[rank]=1;
20 }
21 temp=mark;
22 }
23 for(int i=1;i<=k;i++)
24 {
25 cin>>x;
26 low=1;
27 high=rank;
28 while(low<=high&&a[mid]!=x)
29 {
30 mid=(low+high)/2;
31 if(a[mid]<x) high=mid-1;
32 else low=mid+1;
33 }
34 if(a[mid]==x) cout<<mid<<" "<<b[mid]<<" "<<s[mid]<<endl;
35 else cout<<"fail"<<endl;
36 }
37 return 0;
38 }
求教:1、第3行n<=10000,为什么数组const int MAXN=10010而不是10001
2、第8行定义变量中,temp代表什么(是否代表前一个分数值),为什么初始值要为temp=-1而不是0
3、19行将自己统计人相同分数的人,为什么b[rank]=1?而不是其他写法?
万分感谢大佬们