* 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的矩形...