• <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

            97久久精品无码一区二区| 日韩AV无码久久一区二区 | 精品久久久久香蕉网| 久久婷婷色综合一区二区| 亚洲精品国精品久久99热| 国产欧美久久久精品影院| 久久久无码精品亚洲日韩京东传媒 | 77777亚洲午夜久久多喷| 久久综合久久美利坚合众国| 97精品依人久久久大香线蕉97| 久久久久女人精品毛片| 久久亚洲高清观看| 久久99精品久久久久久秒播| 一本大道久久香蕉成人网| 色综合久久久久综合体桃花网| 国产精品美女久久久久网| 久久精品国产99久久丝袜| 国色天香久久久久久久小说| 久久久久成人精品无码中文字幕| 青青草原1769久久免费播放| 久久福利资源国产精品999| 久久精品中文字幕无码绿巨人| 精品国产青草久久久久福利| 久久久久av无码免费网| 亚洲综合精品香蕉久久网97 | 久久国产免费直播| 久久国产精品久久久| 国产精品99久久久精品无码| 久久精品国产99国产电影网| 久久久无码精品亚洲日韩京东传媒 | 国产精品岛国久久久久| 久久综合伊人77777| 69久久精品无码一区二区| 久久久这里只有精品加勒比| 94久久国产乱子伦精品免费| 久久久久亚洲AV无码麻豆| 久久久久久精品免费看SSS| 开心久久婷婷综合中文字幕| 亚洲国产天堂久久综合网站| 国产精品美女久久久m| 亚洲精品蜜桃久久久久久|