POJ 3320: Jessicas Reading Problem

來源:互聯網
上載者:User

標籤:poj   尺取法   

Jessica’s Reading Problem ( POJ No.3320)
  為了準備考試, Jessica 開始讀一本很厚的課本。要想通過考試,必須把課本中所有的知識點都掌握。這本書總共有 P 頁,第 i 頁恰好有一個知識點 ai(每個知識點都有一個整數編號)。全書中同一個知識點可能會被多次提到,所以她希望通過閱讀其中連續的一些頁把所有的知識點都覆蓋到。給定每頁寫到的知識點,請求出要閱讀的最少頁數。
限制條件
  1 ≤ P ≤ 10^6
輸入:
  P = 5
  a = {1, 8, 8, 8, 1}
輸出:
  2

解題思路:假設從某一頁s開始閱讀,為了覆蓋所有的知識點讀到t頁,這樣的話如果從s+1開始閱讀,那麼必須讀到t’>=t位置,故可以用尺取法。

int P; //頁數int a[P];  //可能重複的P個知識點int count[KP]; //知識點計數數組void solve{    set<int> all_knowledge;    for(int i = 0; i < T; i++)        all_knowledge.insert(a[i]);    knowledge_total = all_knowledge.size();    //尺取法    int start = 0;    int end = 0;    int min_pages = P;    while(1){        while(end < P && knowledge_cnt < knowledge_total) {            if(count[a[end++]]++ == 0)                knowledge_cnt++;        }        if(knowledge_cnt < knowledge_total) {            break;        }        min_pages = MIN(min_pages,end - start);        if(--count[a[start++]] == 0) {            knowledge_cnt--;        }    }    cout << min_pages<<endl;}

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

POJ 3320: Jessicas Reading Problem

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.