牛客練習賽22題解

2021-08-21 12:57:17 字數 1409 閱讀 7866

簡單瞎搞題

不會用bitset,所以沒做出來。實際上還是比較簡單的。

#include

using

namespace

std;

bitset

<1000005>dp[2];

int main()

cout

<2].count()《簡單資料結構1

這裡要運用拓展尤拉定理。 ab

modp

=ab%

φ(p)

+(b≥

φ(p)

?φ(p

):0)

modp

a bm

odp=

ab%φ

(p)+

(b≥φ

(p)?

φ(p)

:0)m

od

p實際上看到這個等式時,我想寫遞迴但寫不出來。。因為這個等式並不是遞迴的形式。。

所以我看別人的題解,實際上我們定義上面式子重新定義乙個fmod(x,p)=x%p+x>=p?x:0

這個mod和原來的mod實際上就是可能多個模數,但是我們再模一次就能消除影響了。既然用這個mod那麼原來的式子就能寫成ab

fmod

p=ab

fmod

φ(p)

fmod

p abf

modp

=abf

modφ

(p)f

modp

,現在就是遞迴形式啦,當我們計算時需要用到快速冪,而快速冪的模也可以用同樣的方式,仔細想想就會明白沒有任何影響。

在最後的答案需要再模p一下。

區間修改單點查詢用樹狀陣列就完事了。

#include

using

namespace

std;

#define lowbit(x) x&(-x)

const

int maxn=5e5+5;

int phi[20000005];

void init(int n)

}int a[maxn];

long

long sum[maxn];

void add(int x,int num)

return res;

}int

fmod(long

long a,int p)

int quick_mul(int a,int num,int p)

return res;

}int q(int l,int r,int p)

int main()

else

printf("%d\n",q(l,r,p)%p);

}return

0;}

牛客老是打不好,還是得多補題啊。

牛客練習賽 22 A

給6個火柴棍,問能不能拼成 熊 或者 象 熊 4根棍子長度一樣,另外2根棍子長度不一樣 象 4根棍子長度一樣,另外2根棍子長度一樣。如果可以拼出熊,輸出 bear 如果可以拼出象,輸出 elephant 如果都不可以拼出,輸出 hernia 一行六個數表示每個火柴棍的長度輸出一行乙個字串表示答案示例...

題解 牛客練習賽51

字首a的數量,字尾c的數量,遇到b就計算一次答案。includeusing namespace std typedef long long ll const int n 1e5 100 char s n int cnt n int main int tmp 0 for int i 1 i n i p...

牛客練習賽64 題解

a 怪盜 1412題目描述 乙個長度為n m k包含n個數字1,m個數字2和k個數字4的陣列,最多可能有多少個子序列1412?如果乙個序列是陣列的子串行,當且僅當這個序列可以由陣列刪去任意個元素,再將陣列中的剩餘元素按順序排列而成。思路 將序列排列成111444441111222222,這樣可以得到...