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

            bon

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            • 1.?re: pku 1861
            • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
            • --edward2
            • 2.?re: pku 3349
            • 大哥超時(shí) 勒
            • --sum
            • 3.?re: pku 3070
            • 學(xué)習(xí)下,哇哈哈
            • --bear
            • 4.?re: poj 3340
            • 不用DFS的,直接有數(shù)學(xué)規(guī)律的,找出滿足條件的最小的數(shù)就可以了
            • --czcomt
            • 5.?re: pku 3070
            • 方法不錯(cuò)額~~~
            • --Zeor

            閱讀排行榜

            評(píng)論排行榜

            pku 2833
            給出n個(gè)數(shù)字,n <= 5000000,要求去掉最大的n1個(gè)數(shù)和最小的 n2 個(gè)數(shù),求剩下的數(shù)的平均值。
            題目要求不能存儲(chǔ)完所有的n個(gè)數(shù)再統(tǒng)計(jì),所以要隨著輸入來動(dòng)態(tài)統(tǒng)計(jì)。

            思路:
            設(shè)已輸入最大的n1個(gè)數(shù)和最小的 n2 個(gè)數(shù)。剩下的數(shù)有n-n2-n1個(gè)。每輸入一個(gè)數(shù) x ,都維護(hù)這個(gè)invariance,則算法結(jié)束時(shí)就得到題目要求的結(jié)果:
                                    avg=((avg*cnt)+a)/(cnt+1), cnt=cnt+1
            其中a這樣定義:若x小于n2個(gè)數(shù)中的最大值amax,則x與amax交換,且a為amax;否則若x大于n1個(gè)數(shù)中的最小值amin,則x與amin交換,且a為amin;否則a就為x。

            這樣我們就動(dòng)態(tài)地維護(hù)了兩個(gè)數(shù)組:一個(gè)是當(dāng)前已輸入的數(shù)中的最大的n2個(gè),另一個(gè)為當(dāng)前已輸入的數(shù)中最小的n1個(gè),且avg是當(dāng)前的答案。這個(gè)invariance一直維護(hù)到算法結(jié)束就得到結(jié)果。

            雖然這里的思想很簡(jiǎn)單,但是維護(hù)invariance這種證明思路是Introduction to Algorithms中常用的。

            回到題目,我用兩個(gè)堆(一個(gè)大頂堆一個(gè)小頂堆)分別維護(hù)兩個(gè)數(shù)組,每次輸入一個(gè)新的數(shù)(假設(shè)前面的n1 + n2 個(gè)已輸入),就按上面的思路來維護(hù)。這里的n1  n2 都比較小,所以堆的效果可能不是很明顯。

             1 
             2 #include <iostream>
             3 #include <algorithm>
             4 //#include <set>
             5 
             6 using namespace std;
             7 
             8 long i,j,k;
             9 int m,l,n;
            10 double a[110],b[110];// 存儲(chǔ)最大的m個(gè)數(shù),與存儲(chǔ)最小的l個(gè)數(shù)
            11 int ca,cb;        //a,b存儲(chǔ)了多少數(shù)字
            12 
            13 // 插入x并返回堆頂元素
            14 void insert_mx_heap(int x)
            15 {
            16     a[++ca]=x;
            17     int cur=ca;
            18     while(cur>1 && a[cur]<a[cur>>1]){
            19         int tmp=a[cur>>1];
            20         a[cur>>1]=a[cur];
            21         a[cur]=tmp;
            22         cur=cur>>1;
            23     }
            24 }
            25 
            26 void insert_mn_heap(int x)
            27 {
            28     b[++cb]=x;
            29     int cur=cb;
            30     while(cb>1 && b[cur]>b[cur>>1]){
            31         int tmp=b[cur>>1];
            32         b[cur>>1]=b[cur];
            33         b[cur]=tmp;
            34     }
            35 }
            36 
            37 void siftdown_mx(int x)
            38 {
            39     a[1]=x;
            40     int cur=1;
            41     while((cur<<1)<=ca){
            42         int j=cur<<1;
            43         if((j+1)<=ca && a[j+1]<a[j]) j++;
            44         if(a[j]>a[cur]) break;
            45         int tmp=a[cur];
            46         a[cur]=a[j];
            47         a[j]=tmp;
            48         cur=j;
            49     }
            50 }    
            51 
            52 void siftdown_mn(int x)
            53 {
            54     b[1]=x;
            55     int cur=1;
            56     while((cur<<1)<=cb){
            57         int j=cur<<1;
            58         if((j+1)<=cb && b[j+1]>b[j]) j++;
            59         if(b[j]<b[cur]) break;
            60         int tmp=b[cur];
            61         b[cur]=b[j];
            62         b[j]=tmp;
            63         cur=j;
            64     }
            65 }
            66 
            67 int main()
            68 {
            69     //freopen("in.txt","r",stdin);
            70     while(scanf("%d%d%ld",&m,&l,&n) && n!=0)
            71     {
            72         ca=cb=0;
            73         int in;
            74         double avg=0;
            75         int cnt;
            76         int tmp[21];
            77         for(i=0;i<m+l;i++) scanf("%d",&tmp[i]);
            78         sort(tmp,tmp+m+l);
            79         for(i=0;i<l;i++) insert_mn_heap(tmp[i]);
            80         for(i=l;i<m+l;i++) insert_mx_heap(tmp[i]);
            81         // 開始輸入
            82         cnt=0;
            83         for(i=m+l;i<n;i++){
            84             scanf("%d",&in);
            85             // in大于最大組中最小值
            86             if(in>a[1]){
            87                 avg=(avg*cnt+a[1])/(++cnt);
            88                 siftdown_mx(in);
            89             }else if(in<b[1]){
            90                 avg=(avg*cnt+b[1])/(++cnt);
            91                 siftdown_mn(in);
            92             }else{
            93                 avg=(avg*cnt+in)/(++cnt);
            94             }
            95         }
            96         printf("%.6lf\n",avg);
            97     }
            98     return 1;
            99 }
            posted on 2008-03-21 16:59 bon 閱讀(325) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Programming Contest
            Google PageRank 
Checker - Page Rank Calculator
            久久精品国产亚洲Aⅴ香蕉| 91麻豆精品国产91久久久久久| 99久久免费只有精品国产| 国产成人99久久亚洲综合精品| 狠狠久久综合| 久久99久国产麻精品66| 久久久精品国产sm调教网站| 香蕉久久一区二区不卡无毒影院 | 久久精品日日躁夜夜躁欧美| 午夜精品久久久久久99热| 国产精品99久久免费观看| 国产精品一区二区久久精品无码 | 久久天天日天天操综合伊人av| 亚洲人成网站999久久久综合| 久久夜色精品国产噜噜麻豆| 国产精品欧美亚洲韩国日本久久 | 国产高清国内精品福利99久久| 日韩电影久久久被窝网| 99精品久久精品| 一本一道久久综合狠狠老| 久久99精品九九九久久婷婷| 国产精品久久久久蜜芽| 精品国产综合区久久久久久 | 精品人妻久久久久久888| 欧美一级久久久久久久大| 久久亚洲精品中文字幕三区| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 亚洲精品乱码久久久久久不卡| 久久久久99精品成人片直播| 久久久久国产精品人妻| 无码任你躁久久久久久久| 国产精品欧美亚洲韩国日本久久| 久久99国产精品久久99果冻传媒 | 91性高湖久久久久| 国产精品久久午夜夜伦鲁鲁| 伊人久久大香线蕉av一区| 久久婷婷人人澡人人爽人人爱| 中文精品99久久国产| 久久久久久久综合狠狠综合| 亚洲精品tv久久久久|