1. 程式人生 > >2017多校Round7(hdu6120~hdu6132)

2017多校Round7(hdu6120~hdu6132)

顏色 round 找規律 計算 sqrt 需要 整數 表示 可能

補題進度:9/13

1001

  待填坑

1002(數學推導)

題意

  有一個按順序的n個點的k叉樹,問每個點子樹個數的異或和是多少(n,k<=1e18)

分析

  可以先求出最大的d,滿足d以上都是滿K叉樹,最後一層是一些零散的點

  然後枚舉每一層,每一層的點分為三種,一種是最下面的孩子深度是d+1,一種是部分孩子的深度是d+1,一種是最下面孩子深度都是d,分別統計答案

  註意特判k=1的時候,這個時候等價於求1^2^3^4^5^6....^n的值

  我們可以把四個四個放在一組,如果k是一個偶數,那麽k^(k+1)=1,(k+2)^(k+3)=1,所以k^(k+1)^(k+2)^(k+3)=1^1=0

  所以1異或到n的值是和n%4的值有關

1003(神奇套路)

題意

  有一個n行m列的棋盤,最初每個位置是指定的紅色或藍色或白色。你要將白色的位置染成紅色或藍色,使得對於任意一個長寬均為偶數的連續子棋盤,其中紅色和藍色的位置數相等。(1<=m,n<=1000)

分析

  題解給出了很神奇的套路

  首先“任意一個長寬均為偶數的連續子棋盤”,我們只需要考慮邊長為2的小棋盤,邊長為4、6、8的這些都是若幹個2*2的拼起來的

  我們設紅色是0,藍色是1,對於棋盤上的(x,y),如果x+y是奇數並且該位置不是?,那麽就把這一位置顏色反轉

  我們發現原來任意一個2*2的子棋盤合法等價於現在新的任意一個2*2的子棋盤對角線上的和相同

  進一步發現這等價於:要麽新棋盤的每一行上的數都各自相同,要麽新棋盤的每一列上的數都各自相同

  於是就可以計算答案了

  具體實現的時候,我們可以記錄每一行、每一列的顏色占用情況,如果發現同一行出現了兩種固定顏色,那麽說明每一行顏色各自相同這個是不可能的了;列的情況也是同理

  最後計算結果就是2^自由行個數 + 2^自由列個數,但是要除去一些重復情況,如果固定顏色中只出現了一種,那麽最終答案需要減去一;如果固定顏色兩種都沒出現,那麽答案要減去二

1004

  待填坑

1005(數學題)

題意

  給定正整數a,求對於所有正整數b,a mod b有多少種可能的結果。1<=a<=1e9

分析

  顯然小於a/2的所有數c都可以作為結果,只需要取b=a-c,另外a本身也可以

  所以答案就是(a-1)/2+2

1006(狀壓DP)

題意

  求從不大於n的所有正整數中選出至少1個且至多k個使得乘積不包含平方因子的方案數(1<=n,k<=500)

分析

  此套路出自於NOI2015壽司晚宴

  我們可以把它看做一個背包問題,我們將500以內所有質因數都壓縮成二進制位,然後就相當於有500個物品,取或者不取,取了的話要保證質因數集合每個位不能超過1

  但是問題是500以內的素數有90多個,無法壓縮成二進制位

  我們可以將sqrt(500)以內的素數壓縮成二進制位(8個),為什麽這樣呢?因為1~500裏的所有數字,其大於sqrt(500)的質因數頂多只有一個

  於是對於1~500以內所有素數我們都可以把它看做一個包,對於1~500內的所有無平方因子數x,我們都可以求出其最大質因數y,把x對於前8個素數的分解情況丟入背包y種,把這個作為背包y中的一個物品

  特別的,如果2*3*5這種全部是由前8個素數乘積構成的數,那就丟到其本身的那個背包

  現在問題就相當於是有若幹個背包,每個背包裏的物品我只能選一個(因為如果多選會造成該較大質因子重復),然後求前八個素數分解情況不沖突的方案數

  很經典的分組背包了,dp[i][s][k]表示前i個包,目前前8個素數選擇情況為s,選了k個數的方案數

  第一維滾動掉即可

1007(網絡流)

題意

  有n個小朋友,標號為1到n,你要給每個小朋友至少1個且至多m個的糖果。小朋友們共提出k個要求,每個要求包括三個整數x,y,z表示x號小朋友得到的糖果數減去y號小朋友得到的糖果數,結果應當不大於z。如果你給i號小朋友j顆糖果,他會獲得w(i,j)的滿意度,你需要最大化所有小朋友的滿意度和。1<=n,m<=50,1<=k<=150,1<=w(i,j)<=1000

分析

  來自題解的建圖方法。

  容易想到拆點,用i.j這點表示給第i個孩子至少j塊糖,當這個點屬於S集合時所代表條件成立。然後i.j->i.j+1連1000-wi,j,i.m向T連1000-wi,m,S向i.1連inf。如果存在ax-ay>=z,x.k->y.k+z連inf。跑最小割,再用n*1000減掉答案。

1008(計算幾何)

題意

  平面直角坐標系上有n個整點,第i個點有一個點權val[i],坐標是(xi,yi),?其中不存在任意兩點連成的直線經過原點。這些整點兩兩之間連有一條線段,線段的權值為其兩端點的權值之積。你需要作一條過原點而不過任意一個給定整點的直線,使得和這條直線相交的線段的權值和最大。1<=n<=5e4,1<=val<=10^4,|xi|,|yi|<=1e9

分析

  很容易想到極角排序,答案的統計就是直線兩邊點集權值和的乘積,所以O(n)掃一圈就可以了

  註意的一點是直線從-π到π的過程中,直線的另一邊可能從第二象限跳到第三象限,所以提前將前n個點接到第n個點後面,極角+2π

1009(二次剩余)

  隊友補了,不管了

1010(找規律)

題意

  有一個長度為n的整數序列an,對其做m次前綴異或和,求最終的序列(1<=n<=2e5,1<=m<=1e9)

分析

  dp[i][j]=dp[i-1][j]^dp[i][j-1]=dp[i-2][j]^dp[i-1][j-1]^dp[i-1][j-1]^dp[i][j-2]=dp[i-2][j]^dp[i][j-2]

  進一步歸納可以得到dp[i][j]=dp[i-2^k][j]^dp[i][j-2^k]

  這只需要從1~m倍增就行了

  時間復雜度O(nlogm)

1011(模擬)

  略,根據題意的構造方式模擬即可

1012

  待填坑

1013

  待填坑

2017多校Round7(hdu6120~hdu6132)