欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 日一区二区三区 | 91精品国产91久久久久久 | 国产亚洲精品综合在线网址 | 99自拍视频在线观看 | 国产精品美女一区二区三区 | 婷婷视频网站 | 污视频免费观看网站 | 91亚洲在线 | 成人免费在线 | 2022国内精品免费福利视频 | 国产一区二区在线免费观看 | 九一国产在线观看免费 | 午夜视频在线观看免费观看在线观看 | 五月天婷五月天综合网站 | 久久久99精品免费观看 | 成人国产一区 | 亚洲日本高清成人aⅴ片 | 久久99国产亚洲精品观看 | 日韩在线观看视频一区二区三区 | 一区二区三区国产 | 党涛| 国产一区二区三区久久久久久久久 | 69久久夜色精品国产69 | 久久日本精品在线热 | 青青91视频 | 日韩欧美在线观看视频 | 欧美视频在线一区 | 亚洲h | 精品成人佐山爱一区二区 | 天天看高清特色大片 | 欧美视频在线免费看 | 亚洲欧美在线观看一区二区 | 亚洲欧美日韩中文字幕在线一区 | 国产精品成人一区二区 | 性夜黄a爽爽免费视频国产 尤物tv在线 | 欧美亚洲国产另类在线观看 | 国产福利资源在线 | www.奇米第四色 | 成人不卡| 日韩精品一区二区三区国语自制 | 精品一区二区久久久久久久网站 |