牛客練習賽54B 求和

2021-09-29 16:35:50 字數 1751 閱讀 1073

第一行乙個整數t,表示資料組數。

接下來t行每行乙個整數n,含義如題目描述所示。

輸出t行,表示每次詢問的結果。
示例1

2

24

8

48

t≤3×1e5, n≤1e18。

輸入資料量可能較大,建議使用較快的讀入方式。

題目大意:

給定乙個數n,讓計算i從0開始到2^n的每乙個數字的lowbit的和。

題解:由於資料範圍較大,可以把前面的幾個資料給找到,然後看看是否能夠找到規律:

n   12

3452^n24

81632lowbit和38

2048

112規律1:

我們發現8=2*2+4=2*2^1+2^2

20=3*4+8=3*2^2+2^3

48=4*8+16=4*2^3+2^4

也就是對於輸入的n,它的lowbit 的和是n*2^(n-1)+2^n,由於輸入的n較大,所以需要使用快速冪:

#include#include#include#includeusing namespace std;

typedef long long ll;

const ll mod=998244353;

ll pow_mod(ll a,ll n,ll mod)

return ret;}

ll solve(ll x)

int main()

return 0;

}

規律2:

n   12

3452^n24

81632lowbit和38

2048

112

當n=1時:結果=3=2*1+2(1-1)

當n=2時:結果=8=2*3+2^(2-1)

當n=3時:結果=20=2*8+2^(3-1)

也就是對於n=x,它的結果就等於2*(n=x-1的結果)*2^(x-1)。

由於資料範圍較大,所以我們直接使用矩陣快速冪:

牛客練習賽4 B

思維題,把 i2 j2 ai2 aj2 絕對值符號去掉後,我們設i2 j2 ai2 aj2 j2 i2 aj2 ai2 j2 aj2 i2 ai2 或者 i2 j2 ai2 aj2 j2 i2 aj2 ai2 ai2 i2 aj2 j2 原式化簡後只有這兩種形式,那麼我們可以設定兩個陣列a n b ...

牛客練習賽69 B

題意 給定n nn個數,乙個x xx表示可以劃分成最多x xx個串,乙個y yy表示在乙個串中最多選擇y yy個數。最後求 i 1x j 1yv al i j sum x sum yval i,j i 1x j 1 y va l i,j v al i,j val i,j val i,j 為 將n n...

《牛客練習賽28 B》

這題主要就是多了乙個平方和的操作。我們維護平方和的值的時候。需要注意在下放的時候,要先把乘法之後的sum1算出來,這對算sum1最終的值沒有影響。但是對sum2的值有影響。因為我們在計算中就在更新adtag的值,所以這個adtag它的sum1應該最終化。includeusing namespace ...