免费广告设计app,北京seo计费,软件开发中以下模型哪些不是采用,做网站内容管理器要吗A - Character Encoding HDU - 6397 思路 #xff1a; 隔板法就是在n个元素间的#xff08;n-1#xff09;个空中插入k-1个板#xff0c;可以把n个元素分成k组的方法 普通隔板法 求方程 xyz10的正整数解的个数。 添元素隔板法 求方程 xyz10的非负整数解的个数。 那么 增加…A - Character Encoding HDU - 6397 思路 隔板法就是在n个元素间的n-1个空中插入k-1个板可以把n个元素分成k组的方法 普通隔板法 求方程 xyz10的正整数解的个数。 添元素隔板法 求方程 xyz10的非负整数解的个数。 那么 增加 3 即转化为 了普通隔板法 但是这个题呢 还有 N 的限制 那么就需要去除掉 分出的块中 有 n 的情况 。 就会 有 一块 出现 n ,两块 n 等等。。 具体 需要根据总数来确定 要去除这些情况贡献的解 发现 如果 有某一块 n 那么就转化为了 先把n个 放到 某一块上 剩下的 总数 - n 再 进行 分为 m块的 分配 计算式即为 。 某一块 * 剩下的 分到 m块上 但是这样会多减去一些因为 这些情况中包含了 有 两块 n 三块 n 等等 。所以 需要 加回来 两块的情况 #includebits/stdc.h
using namespace std;
#define maxn 234567
#define ll long long
#define mod 998244353
ll n,m,k,inv[maxn10],A[maxn10],ans,t;
ll qpow(ll a,ll b)
{ll re1;while(b){if(b%2)re(re*a)%mod;a(a*a)%mod;b1;}return re;
}
void init()
{A[0]inv[0]1;for(int i1; imaxn; i){A[i](A[i-1]*i)%mod;inv[i]qpow(A[i],mod-2)%mod;}
}
ll C(ll a,ll b)
{if(ba)return 0;return (A[b]*inv[a]%mod*inv[b-a])%mod;
}
int main()
{init();scanf(%lld,t);while(t--){ans0;scanf(%lld%lld%lld,n,m,k);if(k0)printf(1\n);else if(km*(n-1))printf(0\n);else if(kn) printf(%lld\n,C(m-1,mk-1));else{ll x-1;ansC(m-1,mk-1);for(int i1; im; i){ans(ansC(i,m)*x%mod*C(m-1,km-1-i*n)%modmod)%mod;x*-1;}printf(%lld\n,ans);}}return 0;
}转载于:https://www.cnblogs.com/SDUTNING/p/10261605.html