欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

HDU5014Number Sequence(貪心)

系統 1810 0

HDU5014Number Sequence(貪心)

題目鏈接

題目大意:
給出n,然后給出一個數字串,長度為n + 1, 范圍在[0, n - 1].然后要求你找出另外一個序列B,滿足上述的要求,而且使得t = A0^B0 + Ai + 1 ^ Bi + 1 + ... + An ^ Bn 最大。

解題思路:
對于一個數字進行異或,要求結果最大的話,那么取這個數字的二進制互補數字是最好的情況,而且能夠發現每次找到一個數字和相應的互補的數字都會是一段區間。就這樣一段一段區間的去尋找每一個點相應的最好的匹配點。

代碼:

      
        
          #
          
            include
          
           <cstdio>
        
        
          #
          
            include
          
           <cstring>
        
        
          typedef
        
        
          long
        
        
          long
        
         ll;

        
          const
        
        
          int
        
         N = 
        
          1e5
        
         + 
        
          5
        
        ;

        
          const
        
        
          int
        
         M = 
        
          20
        
        ;


        
          int
        
         num[N];

        
          int
        
         Map[N];

        
          int
        
         n;
ll t[M];


        
          void
        
         init () {

    t[
        
          0
        
        ] = 
        
          1
        
        ;
    
        
          for
        
         (
        
          int
        
         i = 
        
          1
        
        ; i <= M; i++)
        t[i] = t[i - 
        
          1
        
        ] * 
        
          2
        
        ;
}


        
          int
        
         main () {

    init();
    
        
          while
        
         (
        
          scanf
        
         (
        
          "%d"
        
        , &n) == 
        
          1
        
        ) {

        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i <= n; i++)
            
        
          scanf
        
         (
        
          "%d"
        
        , &num[i]);

        
        
          int
        
         rear = n;
        
        
          int
        
         front;
        ll ans = 
        
          0
        
        ;

        
          // printf ("%lld\n", t[M - 1]);
        
        
          while
        
         (rear >= 
        
          0
        
        ) {

            
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < M; i++)
                
        
          if
        
         (t[i] > rear) {
                    front = t[i] - rear - 
        
          1
        
        ;
                    
        
          break
        
        ;        
                }

            
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < (rear - front + 
        
          1
        
        ) / 
        
          2
        
        ; i++) {

                Map[rear - i] = front + i;
                Map[front + i] = rear - i;
            }

            
        
          if
        
         (rear == front)
                Map[rear] = front;
            rear = front - 
        
          1
        
        ;
        }

        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i <= n; i++)
            ans += num[i] ^ Map[num[i]];
        
        
          printf
        
         (
        
          "%lld\n"
        
        , ans);
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < n; i++)
            
        
          printf
        
        (
        
          "%d "
        
        , Map[num[i]]);
        
        
          printf
        
         (
        
          "%d\n"
        
        , Map[num[n]]);
    }
    
        
          return
        
        
          0
        
        ;
}
      
    

HDU5014Number Sequence(貪心)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一区二区黄色片 | 韩国在线精品福利视频在线观看 | avtom影院入口永久在线观看 | 亚洲性生活免费视频 | www.夜夜骑 | 在线精品自拍亚洲第一区 | 五月婷在线 | 农村寡妇偷人高潮A片小说 午夜爱爱爱爱爽爽爽网站免费 | 日本娇小videos高潮 | 亚洲精品久久久蜜桃 | 狠狠添 | 大开眼界 无删减 | 色之综合天天综合色天天棕色 | 鲁丝片一区二区三区毛片 | 51国产午夜精品免费视频 | 嫩草网站 | 亚洲国产区 | 色播播网| 99精品国产免费久久国语 | 国产精品成人国产乱一区 | 国产精品高潮呻吟久久av黑人 | 午夜影视在线观看免费完整高清大全 | 黑人一区 | 国产精品久久久久久免费软件 | 美女性视频网站 | 亚洲精品久久久久一区二区 | 免费在线黄色片 | 毛片久久 | 欧美老妇交乱视频 | 天天干天天拍天天操 | 一区二区三区四区国产精品视频 | 欧美99| 九九色网站 | 国产人成精品综合欧美成人 | 日本不卡一区二区 | 国产女人成人精品视频 | 欧美一区二 | 日韩在线视频导航 | 国产成人精品久久亚洲高清不卡 | 99久久精品国产导航 | 蜜桃精品久久久久久久免费影院 |