• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
            數據加載中……

            POJ 2010 Moo University - Financial Aid 堆

            昨天做了2008,今天準備做2009。但是看了下題目,發現爆難,才100個人過。
            覺得這種題還是別碰了,等以后牛逼了再做。
            于是跳過2008年,直接到2010年了!呵呵。

            這題還是算容易的,比較適合自己水平發揮,用堆來做,速度尚可 188ms 。


            思路:
            先把牛按照score排序一下,然后從后往前找,把每一頭牛當做是位于中間的那頭牛。
            那現在就是求:
            該頭牛前面的所有牛中,哪 (N - 1) / 2 頭牛aid值的和最小。
            該頭牛后面的所有牛中,哪 (N - 1) / 2 頭牛aid值的和最小。
            這就是典型的用堆可以解決的問題了。

            #include <stdio.h>
            #include 
            <stdlib.h>

            #define MAX_C 100032
            #define MAX_N 20032

            struct node {
                
            int score, aid;
            }
            ;
            struct node in[MAX_C];
            int N, C, F;
            int after[MAX_C], before[MAX_C];
            int heap_size, heap_sum, heap[MAX_N];

            int cmp(const void *a, const void *b)
            {
                
            return ((struct node *)a)->score - ((struct node *)b)->score;
            }


            __inline 
            void shift_down(int idx)
            {
                
            int val = heap[idx];
                
            while (1{
                    idx 
            *= 2;
                    
            if (idx > heap_size)
                        
            break ;
                    
            if (idx + 1 <= heap_size && heap[idx + 1> heap[idx])
                        idx
            ++;
                    
            if (heap[idx] <= val)
                        
            break;
                    heap[idx 
            / 2= heap[idx];
                }

                heap[idx 
            / 2= val;
            }


            __inline 
            int heap_init(int start, int len)
            {
                
            int i;

                heap_sum 
            = 0;
                
            for (i = start; i < start + len; i++{
                    heap[i 
            - start + 1= in[i].aid;
                    heap_sum 
            += in[i].aid;
                }

                
            for (i = heap_size / 2; i >= 1; i--
                    shift_down(i);
                
            return heap_sum;
            }


            __inline 
            int heap_update(int aid)
            {
                
            if (aid < heap[1]) {
                    heap_sum 
            -= heap[1- aid;
                    heap[
            1= aid;
                    shift_down(
            1);
                }

                
            return heap_sum;
            }


            int main()
            {
                
            int i;

                freopen(
            "e:\\test\\in.txt""r", stdin);

                scanf(
            "%d%d%d"&N, &C, &F);
                
            for (i = 0; i < C; i++)
                    scanf(
            "%d%d"&in[i].score, &in[i].aid);
                qsort(
            in, C, sizeof(in[0]), cmp);
                
                heap_size 
            = (N - 1/ 2;
                before[heap_size 
            - 1= heap_init(0, heap_size);
                
            for (i = heap_size; i < C; i++
                    before[i] 
            = heap_update(in[i].aid);
                after[C 
            - heap_size] = heap_init(C - heap_size, heap_size);
                
            for (i = C - heap_size - 1; i >= 0; i--)
                    after[i] 
            = heap_update(in[i].aid);
                
            for (i = C - heap_size - 1; i - heap_size >= 0; i--{
                    
            if (in[i].aid + before[i - 1+ after[i + 1<= F)
                        
            break;
                }

                printf(
            "%d\n", i - heap_size < 0 ? -1 : in[i].score);

                
            return 0;
            }

            posted on 2010-03-13 19:25 糯米 閱讀(618) 評論(0)  編輯 收藏 引用 所屬分類: POJ

            久久久久亚洲av成人无码电影| 精品无码久久久久国产动漫3d| 91精品国产91久久久久福利| 久久久久亚洲Av无码专| 日本精品久久久久中文字幕8| 久久天天躁狠狠躁夜夜av浪潮| 国产精品成人久久久| 99久久亚洲综合精品成人| 一级A毛片免费观看久久精品| 国产精品久久久久影院嫩草| 亚洲精品视频久久久| 国产高潮国产高潮久久久| 一本久久a久久精品综合香蕉| 好属妞这里只有精品久久| 欧美日韩精品久久免费| 精品久久久久久久中文字幕 | 久久久精品2019免费观看| 久久无码精品一区二区三区| 久久棈精品久久久久久噜噜| 中文字幕无码久久人妻| 久久99亚洲综合精品首页| 国产精品久久久福利| 久久精品国产精品亚洲毛片| 成人午夜精品无码区久久| 综合久久精品色| 人妻精品久久久久中文字幕| 成人精品一区二区久久| 久久精品国产99国产精偷| 久久国产精品99国产精| 久久99亚洲网美利坚合众国| 久久久久久亚洲精品成人 | 色狠狠久久综合网| 一本久久a久久精品综合香蕉| 亚洲?V乱码久久精品蜜桃| 亚洲七七久久精品中文国产 | 国产69精品久久久久9999APGF| 精品综合久久久久久98| 亚洲精品无码久久久久去q| 久久AV高潮AV无码AV| 亚洲综合伊人久久大杳蕉| 人妻少妇久久中文字幕一区二区|