這個題,題意給出是乙個k重迴圈,每個迴圈i重1到n,迴圈體為 res = ( res + a[i1] + a[i2] + ... + a[ik] ) % mod;最後res的值。
解法:對於每個a[i]都是一樣的,
所以我們算出來總的a[i]出現的次數/n就可以知道每乙個出現的次數
總的次數是(n^k)k,所以每個出現(n^(k-1))k
所以答案是sum(n^(k-1))k%mod,最後用快速冪求解。
解法:給你乙個數n 求滿足lcm(a, b) == n, a <= b 的 (a,b) 的個數
容易知道 n 是a, b的所有素因子取在a, b中較大指數的積
先將n分解為素數指數積的形式
n=p1^e1p2^e2...pk^ek;
a=p1^a1p2^a2…pk^ak
b=p1^b1p2^b2…*pk^bk
對於a,b它們的最小公倍數為n,則a1<=e1,b1<=e1那麼對於每個素因子pi的個數ei在a,b中的指數ai, bi 至少有乙個等於ei, 另乙個小於等於ei
先不考慮a, b的大小 對於每個素因子pi:
在a中的指數 ai == ei 那麼 pi 在 b 中的指數可取 [0, ei] 中的所有數 有 ei + 1 種情況
在a中的指數 ai < ei 即 ai 在 [0, ei) 中 那麼 pi 在 b 中的指數只能取 ei 有 ei 種情況
那麼對與每個素因子都有 2ei + 1種情況 也就是滿足條件的 (a, b) 有 π(2ei + 1)個 考慮大小時 除了 (n, n) 所有的情況都出現了兩次 那麼滿足a<=b的有 (π(2*ei + 1)) / 2 + 1 個。
解法:把每一列的棋子間隔(可以走的)看成nim博弈中的石子數量,那麼答案就所有差的異或...[http:// " mergeable stack ")
解法:題意 : 給你 1 2 3 個數,讓你模擬棧的操作
1)將乙個元素push到棧裡;
2)將乙個棧的棧頂元素輸出;
3) 將兩個棧合併;
模擬棧,如果用棧來操作,因為棧數目過多,爆記憶體
如果用vector也會爆
list容器就是乙個雙向鍊錶,可以高效地進行插入刪除元素,合併鍊錶
輸入輸出用scanf printf
另外注意清空操作
for (int i = 1; i <= n; i++)//清空操作很必要
list[i].clear();//n個鍊錶
模擬三個操作
解法:對於這個題,題目思路弄了大半天(那真是大半天),不是說題目意思,而是最後的逆元的步驟,最後發現分子乘以分母對mod的逆元最後取模就ac了。。。
快速冪板子
ll quick_pow(ll a, ll b, int mod)//二進位制寫法
return r;
}
組合數板子ll c(ll n, ll m)
逆元直接用費馬小定律,inv=quick_pow(a,mod-2,mod); 青島之行前的準備(數論為主)
這個題,題意給出是乙個k重迴圈,每個迴圈i重1到n,迴圈體為 res res a i1 a i2 a ik mod 最後res的值。解法 對於每個a i 都是一樣的,所以我們算出來總的a i 出現的次數 n就可以知道每乙個出現的次數 總的次數是 nk k,所以每個出現 n k 1 k 所以答案是su...
準備重啟 CSDN 部落格為我的次要部落格。
之前,想要把 163 部落格作為我的次要部落格的,但是它已經倒閉了,而且那裡也的確不是專業的技術社群。現在準備把 csdn 作為乙個次要部落格。所謂次要部落格,就是因為我對自己的主部落格的自我要求很高,沒有我個人研究性的,我一般不會發表到自己的 cnblogs 部落格。所以長期以來其實是 qzone...
為PHP面試而準備的演算法題總結
1 插入排序 一維陣列 基本思想 每次將乙個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序 直到待排序資料元素全部插入完為止。示例 初始關鍵字 49 38 65 97 76 13 27 49 j 2 38 38 49 65 97 76 13 27 49 j 3 65 38 ...