luogu1771 方程的解

2022-06-30 11:09:10 字數 1525 閱讀 8383

對於不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈n,x是正整數,g(x)=x^x mod 1000(即x^x除以1000的餘數),x,k是給定的數。我們要求的是這個不定方程的正整數解組數。

定義f(p, rest)為第p個數,p及p後面的數的和為rest的解的數量,遞迴式為:f(p, rest)=if(rest==0)0 else if (p == k) rest else sum foreach curval(0不用高精度,本方法能得40分。

curval<=rest就可以了,反正如果curval大了以後也能返回0,不要擅自進一步縮小curval的範圍。

#include #include using namespace std;

#define ll long long

#define _ndebug

const int max_k = 110, max_x = 1010, p = 1000;

ll f[max_k][max_x];

ll k, x;

ll mult(ll a, ll b, ll p)

return ans;

}ll power(int a, int n, int p)

return ans;

}ll dp(int p, ll rest)

int main()

把x^x%1000看作乙個線段,a1,a2...看作乙個個隔板劃分出的區域,這就是組合數學中的隔板模型,最終結果為c(k,x^x%1000)

#include #include #include using namespace std;

#define ll long long

const int max_k = 110, max_x = 1010, p = 1000, base = 10000, carry = 4, max_len = 1010;

ll k, x;

ll mult(ll a, ll b, ll p)

return ans;

}ll power(int a, int n, int p)

return ans;

}struct bigint

void set(int x)

while (a[len] == 0 && len > 0)

len--;

} bigint()

bigint operator = (const int x)

bigint operator = (const bigint &a)

void print()

bigint operator += (const bigint &a)

if (a[len + 1])

len++;

return *this;

} bigint operator + (const bigint &a) };

bigint comb(int r, int n)

} return c[r];

}int main()

洛谷 P1771 方程的解

這道題是組合數的知識,就是讓我們求k個正整數加起來等於xx 1000的方案有多少種 由於我們是要找正整數,所以肯定不會有0,所以就把xx 1000用隔板法分成k份,這樣得到就是c k 1,xx 1000 1 因為這個數範圍比較大,所以我們需要高精度處理 ac 如下 include using nam...

VIJOS 1371 方程的解

對於不定方程a1 a2 ak 1 ak g x 其中k 2 x是正整數,g x x x mod 1000 x,k是給定的數.我們要求的是這個不定方程的正整數解組數.舉例來說,當k 3,x 2時,g x 4,原方程即a1 a2 a3 4.這個方程的正整數解有3組.分別為 2,1,1 1,2,1 1,1...

onecode題庫10202 方程的解

10202 方程的解 時間限制 1000 ms 記憶體限制 131072 kb 提交總數 49 ac總數 13 問題描述 這是一道簡單的數學題,有這樣乙個方程 x 3 5x 2 10x 80 y,告訴你y的值,你能求出根x1的值麼?輸入格式 輸入乙個整數y,y的取值範圍在 80,80 輸出格式 輸出...