做网站买二手域名深圳市企业网站建设
news/
2025/9/23 9:47:04/
文章来源:
做网站买二手域名,深圳市企业网站建设,请简述网站建设的一般流程,wordpress 收集Wannafly挑战赛24
题目连接
https://www.nowcoder.com/acm/contest/186#question A.石子游戏
题解
注意到当石子个数为偶数的时候,每回合都会减少一堆偶数石子,因此,先手必胜.
我们可以不考虑奇数堆石子,因为必胜方始终可以动偶数堆.
当必败方将奇数堆分成一堆偶数和一堆…Wannafly挑战赛24
题目连接
https://www.nowcoder.com/acm/contest/186#question A.石子游戏
题解
注意到当石子个数为偶数的时候,每回合都会减少一堆偶数石子,因此,先手必胜.
我们可以不考虑奇数堆石子,因为必胜方始终可以动偶数堆.
当必败方将奇数堆分成一堆偶数和一堆奇数的时候,必胜方将新生成偶数堆移动到原有的偶数堆中即可抵消对方的移动.
代码
#include iostream
int main() {int n;std::cin n;int cnt 0;for(int i 1;i n;i) {int tmp;std::cin tmp;if(tmp % 2 0) cnt ;}if(cnt cnt % 2 0) puts(Alice);else puts(Bob);
}B.222333
题解
先暴力枚举mnmnmn,然后从小到大枚举mmm,找到第一个适合的break即可.
代码
#include iostreamtypedef long long LL;
LL P;
LL mypow(LL x,int n,LL P) {LL res 1;while(n) {if(n 1) res res * x % P;x x*x % P;n 1;}return res;
}int find(int s) {long long ans 1;for(int x 1;x s;x) {ans (mypow(2,x,P) * mypow(3,s-x,P) % P P-1)%P;if(ans 0) return x;}return -1;
}int main() {while(std::cin P) {for(int i 2;i P;i) {int x find(i);if(x ! -1){std::cout x i-x std::endl;break;}}}}C.失衡天平
题解
经典的动态规划问题.
我们记dp[i][j]dp[i][j]dp[i][j]表示考虑前iii个武器,取出来一些武器满足左边减去右边重量差为jjj,所能取得的最大重量和.
递推方程:
dp[i1][j−w[i1]]←dp[i][j]w[i1]dp[i1][j-w[i1]] \leftarrow dp[i][j] w[i1]dp[i1][j−w[i1]]←dp[i][j]w[i1]
dp[i1][jw[i1]]←dp[i][j]w[i1]dp[i1][jw[i1]] \leftarrow dp[i][j] w[i1]dp[i1][jw[i1]]←dp[i][j]w[i1]
注意数组元素不能有负,因此需要给第二维一个basebasebase.
代码
int n,m;
int w[107];
int dp[107][20010];
const int base 10000;
int main() {std::ios::sync_with_stdio(false);std::cin n m;for(int i 1;i n;i)std::cin w[i];for(int i 0;i 100;i) for(int j 0;j 20000;j)dp[i][j] -100000;dp[0][base] 0;for(int i 0;i n;i) {for(int j 0;j 20000;j) {if(j 0) continue;dp[i1][j] std::max(dp[i][j],dp[i1][j]);if(j w[i1] 20000)dp[i1][jw[i1]] std::max(dp[i1][jw[i1]],dp[i][j] w[i1]);if(j - w[i1] 0)dp[i1][j-w[i1]] std::max(dp[i1][j-w[i1]],dp[i][j] w[i1]);}}int ans 0;for(int i 0;i m;i) {ans std::max(ans,dp[n][basei]);ans std::max(ans,dp[n][base-i]);}std::cout ans std::endl;
}D.无限手套
题解
一眼动态规划.
dp[i][j]dp[i][j]dp[i][j]表示考虑前iii种宝石,已经使用了jjj颗宝石,所获得的可能的力量之和.
递推方程:
dp[i1][j]∑t0jdp[i][t](ai1(j−t)2bi1(j−t)1)dp[i1][j] \sum_{t 0}^{j}{dp[i][t](a_{i1}(j-t)^2b_{i1}(j-t)1)}dp[i1][j]∑t0jdp[i][t](ai1(j−t)2bi1(j−t)1)
将后面的部分展开
dp[i1][j]∑t0j(ai1∗dp[i][t]∗t2−(bi12j∗ai1)∗dp[i][t]∗t(ai1∗j2bi1∗j1)∗dp[i][t])dp[i1][j] \sum_{t0}^{j}(a_{i1}*dp[i][t]*t^2 -(b_{i1}2j*a_{i1})*dp[i][t]*t (a_{i1}*j^2b_{i1}*j1)*dp[i][t])dp[i1][j]∑t0j(ai1∗dp[i][t]∗t2−(bi12j∗ai1)∗dp[i][t]∗t(ai1∗j2bi1∗j1)∗dp[i][t])
继续化简得到
dp[i1][j]ai1∑t0jdp[i][t]t2−(bi12j∗ai1)∑t0jdp[i][t]t(ai1∗j2bi1∗j1)∑t0jdp[i][t]dp[i1][j] a_{i1}\sum_{t0}^{j}dp[i][t]t^2 -(b_{i1}2j*a_{i1})\sum_{t0}^{j}dp[i][t]t (a_{i1}*j^2b_{i1}*j1)\sum_{t0}^{j}dp[i][t]dp[i1][j]ai1∑t0jdp[i][t]t2−(bi12j∗ai1)∑t0jdp[i][t]t(ai1∗j2bi1∗j1)∑t0jdp[i][t]
如果我们令
sum2[j]∑t0jdp[i][t]t2sum_2[j] \sum_{t0}^{j}dp[i][t]t^2sum2[j]∑t0jdp[i][t]t2 sum1[j]∑t0jdp[i][t]tsum_1[j] \sum_{t0}^{j}dp[i][t]tsum1[j]∑t0jdp[i][t]t sum0[j]∑t0jdp[i][t]sum_0[j] \sum_{t0}^{j}dp[i][t]sum0[j]∑t0jdp[i][t]
那么
dp[i1][j]ai1sum2[j]−(bi12j∗ai1)sum1[j](ai1∗j2bi1∗j1)sum0[j]dp[i1][j] a_{i1}sum_2[j] -(b_{i1}2j*a_{i1})sum_1[j] (a_{i1}*j^2b_{i1}*j1)sum_0[j]dp[i1][j]ai1sum2[j]−(bi12j∗ai1)sum1[j](ai1∗j2bi1∗j1)sum0[j]
转移就变成O(1)O(1)O(1)的了,空间上再滚动数组优化一下就过了.
代码
typedef long long LL;
const int N 10007;
const LL P 998244353;
LL dp[2][N],a[N],b[N],sum2[2][N],sum1[2][N],sum0[2][N];
LL Mul(LL a,LL b) {return a * b % P;
}
LL Add(LL a,LL b) {return (a b) % P;
}
int n,q;
int main() {std::ios::sync_with_stdio(false);std::cin n;rep(i,1,n) {std::cin a[i] b[i];}sum0[1][0] 1;rep(i,1,10000) {dp[1][i] ((a[1]*i%P*i%P) (b[1]*i%P) 1)%P;sum2[1][i] Add(sum2[1][i-1],dp[1][i]*i%P*i%P);sum1[1][i] Add(sum1[1][i-1],dp[1][i]*i%P);sum0[1][i] Add(sum0[1][i-1],dp[1][i]);}rep(i,2,n) {rep(j,0,10000) {dp[i1][j] (Mul(a[i],sum2[(i1)1][j]) - Mul(b[i]2*j*a[i]%P,sum1[(i1)1][j]) Mul((a[i]*j%P*j%Pb[i]*j1)%P,sum0[(i1)1][j]) P )% P;sum0[i1][j] dp[i1][j];sum1[i1][j] dp[i1][j]*j%P;sum2[i1][j] dp[i1][j]*j%P*j%P;if(j) {sum0[i1][j] Add(sum0[i1][j],sum0[i1][j-1]);sum1[i1][j] Add(sum1[i1][j],sum1[i1][j-1]);sum2[i1][j] Add(sum2[i1][j],sum2[i1][j-1]);}}memset(sum0[(i1)1],0,sizeof(sum0[(i1)1]));memset(sum1[(i1)1],0,sizeof(sum1[(i1)1]));memset(sum2[(i1)1],0,sizeof(sum2[(i1)1]));}std::cin q;while(q--){int x;std::cin x;std::cout dp[n1][x] std::endl;}return 0;
}E.旅行
题解
还没看…
F. wyf的超级多项式
题解
很棒的一道题,学了很多知识.
我们考虑FnF_nFn的递推公式,猜测
Fnc1Fn−1c2Fn−2...ckFn−kF_n c_1F_{n-1}c_2F_{n-2}...c_kF_{n-k}Fnc1Fn−1c2Fn−2...ckFn−k
下面我们需要求出c1,c2,...,ck.c_1,c_2,...,c_k.c1,c2,...,ck.
令c0−1c_0 -1c0−1,我们将递推式整理一下得到:
c0Fnc1Fn−1c2Fn−2...ckFn−k0c_0F_n c_1F_{n-1}c_2F_{n-2}...c_kF_{n-k} 0c0Fnc1Fn−1c2Fn−2...ckFn−k0
由于前FiF_{i}Fi的通项公式已经给出了,我们可以将其代入得到:
[c0a1v1nc0a2v2nc0a3v3n...c0akvknc1a1v1n−1c1a2v2n−1c1a3v3n−1...c1akvkn−1c2a1v1n−2c2a2v2n−2c2a3v3n−2...c2akvkn−2...............cka1v1n−kcka2v2n−kcka3v3n−k...ckakvkn−k]\left[ \begin{matrix} c_0a_1v_1^n amp; c_0a_2v_2^n amp; c_0a_3v_3^n amp; ...amp; c_0a_kv_k^n\\ c_1a_1v_1^{n-1} amp; c_1a_2v_2^{n-1} amp; c_1a_3v_3^{n-1} amp; ...amp; c_1a_kv_k^{n-1}\\ c_2a_1v_1^{n-2} amp; c_2a_2v_2^{n-2} amp; c_2a_3v_3^{n-2} amp; ...amp; c_2a_kv_k^{n-2}\\ ... amp; ... amp; ... amp; ... amp; ...\\ c_ka_1v_1^{n-k} amp; c_ka_2v_2^{n-k} amp; c_ka_3v_3^{n-k} amp; ...amp; c_ka_kv_k^{n-k}\\ \end{matrix} \right] ⎣⎢⎢⎢⎢⎡c0a1v1nc1a1v1n−1c2a1v1n−2...cka1v1n−kc0a2v2nc1a2v2n−1c2a2v2n−2...cka2v2n−kc0a3v3nc1a3v3n−1c2a3v3n−2...cka3v3n−k...............c0akvknc1akvkn−1c2akvkn−2...ckakvkn−k⎦⎥⎥⎥⎥⎤ 上面矩阵中所有的项之和等于000.
首先,分析一下这个矩阵,每一行的和肯定不能为000了,因为它使我们要求的答案,那么我们可以利用充分条件构造每一列都是000,这样整个矩阵所有项的和就是000了.
这么构造是有原因的,每一列形式都很相似,可以归结到多项式中去.
记G(x)ckck−1x...c0xkG(x) c_k c_{k-1}x ... c_0x^kG(x)ckck−1x...c0xk,显然v1,v2...,vkv_1,v_2...,v_kv1,v2...,vk是G(x)G(x)G(x)的kkk个零点,因此我们得到G(x)a(x−v1)(x−v2)...(x−vk)G(x) a(x-v_1)(x-v_2)...(x-v_k)G(x)a(x−v1)(x−v2)...(x−vk)
又由于c0−1c_0 -1c0−1,得到a−1a -1a−1,
所以G(x)−(x−v1)(x−v2)...(x−vk)G(x) -(x-v_1)(x-v_2)...(x-v_k)G(x)−(x−v1)(x−v2)...(x−vk)
ccc序列即GGG函数的系数,因此求出了GGG就可以确定ccc了.
对于这种形式的多项式展开,我们使用分治FFT/NTTFFT/NTTFFT/NTT就可以在O(nlogn2)O(nlogn^2)O(nlogn2)时间内做到了.
代码
#include iostream
#include algorithm
#include cstring
#define pr(x) std::cout #x : x std::endl
#define rep(i,a,b) for(int i a;i b;i)
#define clr(x) memset(x,0,sizeof(x))
#define setinf(x) memset(x,0x3f,sizeof(x))typedef long long LL;
const int N 1 20;
const int P 1004535809;
const int G 3;
const int NUM 20;LL wn[NUM];
LL a[N], b[N];LL quick_mod(LL a, LL b, LL m)
{LL ans 1;a % m;while(b){if(b 1){ans ans * a % m;b--;}b 1;a a * a % m;}return ans;
}void GetWn()
{for(int i 0; i NUM; i){int t 1 i;wn[i] quick_mod(G, (P - 1) / t, P);}
}
void Rader(LL a[], int len)
{int j len 1;for(int i 1; i len - 1; i){if(i j) std::swap(a[i], a[j]);int k len 1;while(j k){j - k;k 1;}if(j k) j k;}
}void NTT(LL a[], int len, int on)
{Rader(a, len);int id 0;for(int h 2; h len; h 1){id;for(int j 0; j len; j h){LL w 1;for(int k j; k j h / 2; k){LL u a[k] % P;LL t w * a[k h / 2] % P;a[k] (u t) % P;a[k h / 2] (u - t P) % P;w w * wn[id] % P;}}}if(on -1){for(int i 1; i len / 2; i)std::swap(a[i], a[len - i]);LL inv quick_mod(len, P - 2, P);for(int i 0; i len; i)a[i] a[i] * inv % P;}
}void Conv(LL a[], LL b[], int n)
{NTT(a, n, 1);NTT(b, n, 1);for(int i 0; i n; i)a[i] a[i] * b[i] % P;NTT(a, n, -1);
}
LL v[N],F[N];LL C[N];inline int expand(int x){int res 1;while(res x) res 1;res 1;return res;
}void solve(int l,int r,LL Ans[]) {if(r l) {Ans[0] P-v[l];Ans[1] 1;return ;}int mid (l r) / 2;int lft mid - l 1;int rgt r - mid;LL *LA new LL[(lft1)*2],*RA new LL[(rgt1)*2];solve(l,mid,LA);solve(mid1,r,RA);rep(i,0,lft) a[i] LA[i];rep(i,0,rgt) b[i] RA[i];int len 1;while(len r-l1) len 1;rep(i,lft1,len) a[i] 0;rep(i,rgt1,len) b[i] 0;NTT(a,len,1);NTT(b,len,1);rep(i,0,len) a[i] a[i] * b[i];NTT(a,len,-1);rep(i,0,r-l1) Ans[i] a[i];
}
int n,k;
int main()
{GetWn();std::ios::sync_with_stdio(false);std::cin n k;rep(i,1,k) {std::cin v[i];}rep(i,1,k) {std::cin F[i];}solve(1,k,C);rep(i,k1,n) {rep(j,1,k) {F[i] (F[i] ((P-C[k-j] % P)*F[i-j] % P)) % P;}}std::cout F[n] std::endl;return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912100.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!