noip2011選擇客棧o(n)_noip複賽提高組

來源:互聯網
上載者:User

一位神級大大說:這題不A的會編程麼 orz

好吧,其實暴力貪心的方法雖然不是嚴格O(n)的但是也可以過0.0

所以這裡只介紹O(n) 的思路和代碼,即正解orz

我們枚舉1~n的客棧,以我們枚舉的客棧作為選擇的最右邊的客棧

1、如果這個客棧可以喝咖啡,那麼它前面所有的客棧都可以選,choose=num, ans=ans+之前同色客棧數

      並且它之後與它同色的客棧都可以選,

     但是我們是順序枚舉,所以在更新完ans後把這個客棧也放到可以選擇的客棧裡即choose,那麼以後與它同色就都可以選它了,同時該顏色客棧加1

2、如果這個客棧不能喝咖啡,那它這能有兩種選擇:(1)、中間有咖啡的(2)、另一個是可以喝咖啡的 總之就是可以選的

     所以此時我們不能傻傻的簡單的把ans+之前同色客棧數而是可以選擇的客棧數,即choose數組中與它同色的個數,同時它不能更新choose數組只能給該顏色客棧+1

總之就是用兩個數組,一個記錄各種顏色的客棧總數,一個記錄各種顏色可以選擇的客棧數,遇到一個可以當咖啡廳的就更新可以選擇的=總數

總之,非常巧妙 orz QRZ

var        n,m,p,a,b,ans   :longint;        i               :longint;        num,choose      :array[0..55] of longint;begin   read(n,m,p);   for i:=1 to n do   begin      read(a,b);      if (b<=p) then choose:=num;      inc(ans,choose[a]);      inc(num[a]);      if (b<=p) then inc(choose[a]);    end;   writeln(ans);end.
——by Eirlys

轉載請註明出處=w=

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.