首页 > 代码库 > PAT1038(两个运行超时 未解决

PAT1038(两个运行超时 未解决

# include<iostream>
# include<algorithm>
using namespace std;
int jishu(int a[],int N,int key)
{
    int left = 0, right = N-1 , mid,flag=0;
    while(left<=right)
    {
        mid = left + (left + right)/2 ;
        if(key == a[mid])
        {
            flag=1 ; break;
        }
        else if(key < a[mid])
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
    }
    int count = 0;
    if(flag==0)
    {
        return count;
    }
    else
    {
        for(int i=mid;i<N;i++)
        {
            if(a[i]==key)
            {
                count++;
            }
            else
            {
                break;
            }
        }
        for(int i=mid-1;i>=0;i--)
        {
            if(a[i]==key)
            {
                count++;
            }
            else
            {
                break;
            }
        }
        return count;
    }
}
int main()
{
    int N,K,i,j;
    cin>>N;
    int a[N];
    for(i=0;i<N;i++)
    {
        cin>>a[i];
    }
    sort(a,a+N);
    cin>>K;
    int b[K];
    for(i=0;i<K;i++)
    {
        cin>>b[i];
        if(i != K-1)
        {
            cout<<jishu(a,N,b[i])<<" ";
        }
        else
        {
            cout<<jishu(a,N,b[i]);
        }
    }
    return 0;
}

 

 

本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。

 

输入格式:

 

输入在第1行给出不超过105的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。

 

输出格式:

 

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0

 

PAT1038(两个运行超时 未解决