日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AtCoder Regular Contest 059

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AtCoder Regular Contest 059 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • C - Be Together
  • D - Unbalanced
  • E - Children and Candies
  • F - Unhappy Hacking

題目鏈接

C - Be Together

200200200分 結論

直接取所有數的平均數,由于需要是整數,所以算一下mid,mid+1,mid?1mid,mid+1,mid-1mid,mid+1,mid?1,取最小值即可。

代碼

D - Unbalanced

400400400分 結論

不難發現如果有一段是合法的那么一定存在長度為222或者333的串合法,直接找即可。

代碼

E - Children and Candies

800800800dpdpdp + 前綴和優化

題面太陰間了,簡單解釋一下。

nnn個小朋友,ccc個糖果,如果第iii個小朋友分了aaa個糖果,那么他得到的快樂值是xiax_{i}^axia?,一個幼兒園的快樂值是小朋友快樂值乘積,定義f(x1,x2,...,xn)f(x_1,x_2,...,x_n)f(x1?,x2?,...,xn?)為一個幼兒園的快樂值,現在讓你計算:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-d6J2qEfu-1645840763184)(C:\Users\Libra_Glow\AppData\Roaming\Typora\typora-user-images\image-20220226094553741.png)]

顯然考慮dpdpdpdp[i][j][k][p]dp[i][j][k][p]dp[i][j][k][p] 表示到第iii個人,已經分了jjj個,要分給他kkk個,當前選了xi=px_i=pxi?=p,轉移方程也比較明顯dp[i][j][k][p]+=∑t=0j?k∑h=ai?1bi?1dp[i?1][j?k][t][h]dp[i][j][k][p]+=\sum_{t=0}^{j-k}\sum_{h=a_{i-1}}^{b_{i-1}}dp[i-1][j-k][t][h]dp[i][j][k][p]+=t=0j?k?h=ai?1?bi?1??dp[i?1][j?k][t][h],可以發現對于第三維和第四維我們可以使用前綴和優化掉,更進一步可以發現根本不需要存第三維和第四維,直接記dp[i][j]dp[i][j]dp[i][j]即可,預處理一下[ai,bi][a_i,b_i][ai?,bi?]的區間取某個冪次的和即可,復雜度可以降到O(n3)O(n^3)O(n3)

代碼

F - Unhappy Hacking

800800800dpdpdp

直接考慮dp[i][j]dp[i][j]dp[i][j]表示用了iii次操作,匹配到了第jjj位,一開始沒想出來,因為是將jjj放到了第一層循環,以長度作為dpdpdp決策的轉移,也就是考慮dp[i][j],dp[k][j?1]dp[i][j],dp[k][j-1]dp[i][j],dp[k][j?1],這樣顯然是不好搞的,考慮反過來,以操作次數作為決策點,i?1?>ii-1 -> ii?1?>i只進行了一次操作,顯然就只有三個情況,我們依次考慮:

  • dp[i][j]+=dp[i?1][j?1]dp[i][j]+=dp[i-1][j-1]dp[i][j]+=dp[i?1][j?1] 當前操作打111或者000,根據第jjj位確定
  • dp[i][j]+=dp[i?1][j+1]?2dp[i][j]+=dp[i-1][j+1]*2dp[i][j]+=dp[i?1][j+1]?2 當前操作選擇按回退,因為我們并不關心j+1j+1j+1位是000還是111,所以需要乘222

注意j=0j=0j=0的時候還需要加上f[i?1][0]f[i-1][0]f[i?1][0]

復雜度O(n2)O(n^2)O(n2)

代碼

還有一種比較巧妙的方法,可以知道長度為lenlenlen的字符串出現的概率都相等,所有情況是2len2^{len}2len,所以我們如果能求出來所有的情況,除上2len2^{len}2len即可。

dp[i][j]dp[i][j]dp[i][j]表示用了iii次操作,長度為jjj的方案數,直接寫轉移了:

  • dp[i][j]+=dp[i?1][j?1]?2dp[i][j]+=dp[i-1][j-1]*2dp[i][j]+=dp[i?1][j?1]?2 當前操作打1,01,01,0,所以需要乘222
  • dp[i][j]+=dp[i?1][j+1]dp[i][j]+=dp[i-1][j+1]dp[i][j]+=dp[i?1][j+1] 按回退,由于f[i?1][j+1]f[i-1][j+1]f[i?1][j+1]的方案就已經包含了j+1j+1j+10,10,10,1的兩種情況,所以不需要乘222

復雜度O(n2)O(n^2)O(n2)

代碼

總結

以上是生活随笔為你收集整理的AtCoder Regular Contest 059的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。