紫書 例題10 6 無關的元素 UVa1635

2021-07-25 23:03:27 字數 1651 閱讀 5521

題意:給定n個數a1,a2····an,依次求出相鄰兩個數值和,將得到乙個新數列,重複上述操作,最後結果將變為乙個數,問這個數除以m的餘數與那些數無關?例如n=3,m=2時,第一次得到a1+a2,a2+a3,在求和得a1+2*a2+a3,它除以2的餘數和a2無關。1<=n<=10^5, 2<=m<=10^9

分析:通過試驗可以發現,本題等價於求解c(n-1,i)的組合數中有哪些是m的倍數,可以利用唯一分解定理來判斷:事先分解m,隨後利用遞推式計算每一項中包含m的素因數的指數即可。

**如下:

//

//created by bluebuff 2016/1/11

//#pragma comment(linker,"/stack:102400000,102400000")

//#include

//#include

//#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include //isstringstream

#include

#include

using

namespace

std;

//using namespace __gnu_pbds;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair pp;

#define rep1(i, a, b) for(int i = a; i < b; i++)

#define rep2(i, a, b) for(int i = a; i <= b; i++)

#define rep3(i, a, b) for(int i = a; i >= b; i--)

#define clr(a, b) memset(a, b, sizeof(a))

#define mp(x, y) make_pair(x,y)

template

inline

void getmax(t1 &a, t2 b)

template

inline

void getmin(t1 &a, t2 b) while(m % i == 0); //將i除乾淨}}

if(m > 1)//如果分解到最後m仍然大於1,說明它是乙個素數。注意:如果只是判斷素因子有哪些,可以沒有此處判斷,否則必須有此步

}bool check(int n, int j)//按照遞推公式來計算第j項,檢查唯一分解式的指數

for(int i = 1; i <= num; i++)

}return

true;

}int main()

}printf("%d\n", cnt);

for(int i = 0; i < cnt; i++)

}return

0;}

uva213 優化演算法 紫書例題

注意,我的 和紫書 不一樣。首先來說一下我的 與紫書所給的 的區別。我的 不是對編碼頭做處理,而是對編碼資訊 也就是二進位制需解碼的資訊 進行處理,使其與編碼頭一一對應。怎麼說呢,我覺得我的 有思考的過程,我覺得有必要寫一下。思路 例子 編碼頭 abcdefghijklmn 我希望達成的目的是編碼頭...

紫書 例題 10 13 UVa 830(遞推)

首先我們按照這三個u的位置來分類,當前三個u在i,i 1,i 2。那麼先看三個u前面,前面不能有三個u,因為我們不能重複計算 那麼就是所有的組合減去有u的情況 為了敘述方便,我們設答案為f n 沒有三個u的方案數為 g n 那麼顯然g n 2的n次方 f n 然後我們看三個u後面,後面就任意了是2的...

紫書 例題8 2 UVa 11605(構造法)

這道題方法非常的巧妙,兩層的n n,第一層第i行全是第i個國家,第二層的第j列全是第j個國家。這樣能符合題目的條件。比如說第1個國家,在第一層的第一行全是a,然後在第二層的第一行就有abcde 這樣a就和所有的國家都連線了,其他國家也是一樣的。只能說這種方法非常巧妙吧,答案講出來很簡單,但是不容易想...