csp模擬 模擬測試4

2022-02-03 08:04:19 字數 4141 閱讀 2854

* t1是暴力分,t2當時沒有花太多時間去推導,一見到t2就十分害怕,便放過了它,t3的話花了大量的時間推了乙個錯誤的解,,,

* 以後對於t2這種題不要未戰先怯,一點一點的去推導!那一天我們在教室裡許下約定。

我至今還記得我們許下約定時的歡聲笑語。我記得她說過她喜歡吃餅乾,很在意自己體重的同時又控制不住自己。她跟我做好了約定:我拿走她所有的餅乾共\(\text n\)塊,在從今天起不超過\(\text d\)天的時間裡把所有的餅乾分次給她,每天給她的餅乾數要少於\(\text m\)以防止她吃太多。

當然,我們的約定並不是餅乾的約定,而是一些不可言狀之物。

現今回想這些,我突然想知道,有多少種方案來把餅乾分給我的她。

每個測試點有多組測試資料。資料組數 \(\text t \le \text 10\)

對於每組資料,有一行共三個整數 \(\text \) 含義如題。

輸入結束標識為 \(\text \) (不含引號)。

對於每組資料,輸出一行共乙個整數,表示方案數對 998244353 取模後的結果。

5 2 5

3 3 3

5 4 5

4 1 2

1 5 1

1250 50 50

0 0 0

4752

00505279299

\[ans = \sum dp(i, 0) \times \binom

\]

#include using namespace std;

//#define int long long

#define print(x) cerr << #x << " : " << x << endl;

inline int read()

const int mod = 998244353;

const int maxn = 2000 + 10;

long long n, m, d;

long long f[maxn][maxn], sum[maxn][maxn], c[maxn];

long long jc[maxn], ny[maxn], jcny[maxn];

signed main ()

ans = (ans + f[i][n] * jcny[i] % mod * c[i] % mod) % mod;

}printf("%lld\n", ans);}}

出個題就好了.這就是出題人沒有寫題目背景的原因.

你在平面直角座標系上.

你一開始位於(0,0).

每次可以在上/下/左/右四個方向中選乙個走一步.

即:從(x,y)走到(x,y+1),(x,y-1),(x-1,y),(x+1,y)四個位置中的其中乙個.

允許你走的步數已經確定為n.現在你想走n步之後回到(0,0).但這太簡單了.你希望知道有多少種不同的方案能夠使你在n步之後回到(0,0).當且僅當兩種方案至少有一步走的方向不同,這兩種方案被認為是不同的.

答案可能很大所以只需要輸出答案對109+7取模後的結果.(109+7=1000000007,1和7之間有8個0)

這還是太簡單了,所以你給能夠到達的格點加上了一些限制.一共有三種限制,加上沒有限制的情況,一共有四種情況,用0,1,2,3標號:

0.沒有任何限制,可以到達座標系上所有的點,即能到達的點集為

1.只允許到達x軸非負半軸上的點.即能到達的點集為

2.只允許到達座標軸上的點.即能到達的點集為

3.只允許到達x軸非負半軸上的點,y軸非負半軸上的點以及第1象限的點.即能到達的點集為

一行兩個整數(空格隔開)n和typ,分別表示你必須恰好走的步數和限制的種類.typ的含義見【題目描述】.

一行乙個整數ans,表示不同的方案數對10^9+7取模後的結果.

【樣例輸入0】

100 0

【樣例輸出0】

383726909

【樣例輸入1】

100 1

【樣例輸出1】

265470434

【樣例輸入2】

100 2

【樣例輸出2】

376611634

【樣例輸入3】

100 3

【樣例輸出3】

627595255

10%的資料,typ=0,n<=100

10%的資料,typ=0,n<=1000

5%的資料, typ=0,n<=100000

10%的資料,typ=1,n<=100

10%的資料,typ=1,n<=1000

5%的資料, typ=1,n<=100000

10%的資料,typ=2,n<=100

15%的資料,typ=2,n<=1000

10%的資料,typ=3,n<=100

10%的資料,typ=3,n<=1000

5%的資料, typ=3,n<=100000

以上11部分資料沒有交集.

100%的資料,保證n為偶數,2<=n<=100000,0<=typ<=3.

\[\\

\because l = r, u = d

\\\because l + r + u + d = n

\\\therefore \sum \frac

\]對於每乙個l計算即可。

//這個**寫的有點複雜了,可以將卡特蘭數寫成函式的形式,方便很多!~

40分**

#include using namespace std;

#define min(a, b) (a) < (b) ? (a) : (b)

#define print(x) cerr << #x << " : " << x << endl;

#define print(x, size) copy(x + 1, x + size + 1, ostream_iterator(cout, " ")), cout << endl;

inline int read()

const int maxn = 20000 + 100;

char s[maxn];

int a[maxn], sum[maxn];

int main ()

ans = min(ans1, ans);

}printf("%lld\n", ans);}}

滿分**在路上!

csp模擬 模擬測試16

fdasds include using namespace std define cle a memset a,0,sizeof a inline int read const int mod 1e9 7,maxn 1e3 100 int n,m,ans 0 int f maxn maxn int...

CSP模擬 模擬測試5

題意是讓求平均值第k小的連續子區間。發現直接計算無論怎麼優化都是 n 2 的,然後發現這樣找k個的似乎可以考慮二分答案。簡單推一下式子。記 sum i 為字首和,顯然符合條件的區間有 frac leq mid 即 sum j j times mid leq sum i i times mid 預設 ...

CSP2019模擬測試 遊戲

給定乙個n m n mn m的矩形方格紙,每次可以把它裁為兩個子矩形,若裁出乙個1 1 1 11 1則勝,判斷先手是否必勝。n 2000,m 2000 n le 2000,m le 2000 n 2000 m 2 000 直觀的想法是設f i j f i j f i j 為i ji j i j的矩形...