亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HDU5014Number Sequence(貪心)

系統(tǒng) 1998 0

HDU5014Number Sequence(貪心)

題目鏈接

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

解題思路:
對于一個(gè)數(shù)字進(jìn)行異或,要求結(jié)果最大的話,那么取這個(gè)數(shù)字的二進(jìn)制互補(bǔ)數(shù)字是最好的情況,而且能夠發(fā)現(xiàn)每次找到一個(gè)數(shù)字和相應(yīng)的互補(bǔ)的數(shù)字都會是一段區(qū)間。就這樣一段一段區(qū)間的去尋找每一個(gè)點(diǎn)相應(yīng)的最好的匹配點(diǎn)。

代碼:

      
        
          #
          
            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(貪心)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品视频5 | 精品综合久久久久久蜜月 | 国产一区二区三区免费视频 | 免费国产成人 | 思思久久99热这里只有精品66 | 美女色影院 | 欧美成人aaa大片 | 国产精品视频一区二区三区经 | 女bbwxxxx高清 | 欧美成人观看 | 欧美激情久久欧美激情 | 国产夫妻久久 | 中文在线亚洲 | 欧美成人毛片在线视频 | 99在线免费观看 | 在线看的成人性视频 | 亚洲日韩精品欧美一区二区一 | 天天操夜夜摸 | 中国特黄特级真人毛片 | 国产精品久久久久一区二区 | 国产区二区 | 国产日韩精品视频一区二区三区 | 99热久久这里只有精品99 | 亚洲免费在线视频播放 | 天天干狠狠干 | 青青在线成人免费视频 | 免费观看呢日本天堂视频 | 波多野结衣视频一区 | 国产精选在线播放 | 国产99视频精品草莓免视看 | 在线视频综合视频免费观看 | 色综合色狠狠天天综合色 | 国产99视频在线 | 变态 调教 视频 国产九色 | 四虎国产精品4hu永久 | 久操视频网站 | 欧美黄视频在线观看 | 免费看一级a一片毛片 | 欧美在线成人午夜网站 | 国产精品1区 | 亚洲午夜久久久久国产 |