第一行乙個整數t,表示資料組數。接下來t行每行乙個整數n,含義如題目描述所示。
輸出t行,表示每次詢問的結果。示例1
224
848
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 ...