竹園論壇

標題: d401 - B-成績單 [打印本頁]

作者: Sylveon    時間: 2014-5-6 15:10
標題: d401 - B-成績單
原題:http://zerojudge.tw/ShowProblem?problemid=d401
AC:http://zerojudge.tw/Submissions?problemid=d401&account=lfs92002

找第K大數,用類似快速排序法可以達到理想Θ(N)的時間找第K大。

密技:C++ STL - partial_sort 可以只排序到前K項完成,但在此題可能不太適合使用。


/**********************************************************************************/
/*  Problem: d401 "B-成績單" from 板橋高中98-2模擬測驗                 */
/*  Language: CPP (811 Bytes)                                                     */
/*  Result: AC(0.3s, 4.1MB) judge by this@ZeroJudge                               */
/*  Author: lfs92002 at 2013-05-19 21:09:42                                       */
/**********************************************************************************/


#include<cstdio>
#include<algorithm>
using namespace std;

int search(int *arr,int L,int R,int k)
{
    int p=L,rl=L+1,rr=R;
        while(rl<=rr)
        {
                while(rl<=rr && arr[rl]<=arr[p] )++rl;
                while(rl<=rr && arr[p] < arr[rr])--rr;
                if(rl<rr)swap(arr[rl],arr[rr]);
        }
        swap(arr[p],arr[rr]);
        if(rr==k)return arr[rr];
        if(rr> k)return search(arr,L,rr-1,k);
        return search(arr,rr+1,R,k);
}
int Arr[1000000],Brr[1000000];
int main()
{
        int N,An,Bn,u,v,k,ak,bk;
        while(~scanf("%d",&N))
        {
                An=Bn=0;
                while(N--)
                {
                        scanf("%d%d",&u,&v);
                        if(u==1)
                        {
                                Arr[++An]=-v;
                        }
                        else
                        {
                                Brr[++Bn]=-v;
                        }
                }
                scanf("%d",&k);
                ak=search(Arr,0,An,k);
                bk=search(Brr,0,Bn,k);
                if(ak<bk)
                        printf("1 %d\n",bk-ak);
                else
                        printf("2 %d\n",ak-bk);
        }
        return 0;
}





作者: allenwhale    時間: 2014-5-6 20:08
好像可以用nth_element





歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2