2022.11.1 模拟赛题解
39 与 93
简化题面
给定
简要题解
首先显然的博弈论,摆出
那么此题就是要我们求出有多少种方案,满足在
考虑
然后我们考虑优化:
时间优化
由于
空间优化
滚动数组优化即可。
code
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5,P=1e9+7;
inline int read() {
int x=0,w=0; char ch=getchar();
while(!isdigit(ch)) w|=(ch=='-'), ch=getchar();
while(isdigit(ch)) x=x*10+(ch^48), ch=getchar();
return w?-x:x;
}
int n,s,sum,a[N],f[10][1<<20|1],b[1<<20|1];
inline void Add(int &x,int y) { x+=y-P; x+=(x>>31)&P; }
int main() {
n=read(); s=read(); for(int i=1;i<=n;i++) a[i]=read(), sum^=a[i];
sort(a+1,a+1+n);
f[0][0]=1;
for(int i=1,m=1;i<=n;i++) {
while(m<=a[i]) m<<=1;
for(int j=0;j<m;j++) b[j]=f[s-1][j];
for(int j=s-1;j;j--)
for(int k=0;k<m;k++) Add(f[j][k],f[j-1][k^a[i]]);
for(int j=0;j<m;j++) Add(f[0][j],b[j^a[i]]);
}
printf("%d\n",(f[0][sum]-(n%s==0)+P)%P);
return 0;
}
zbox 的刷题
简要题面
现在有
简要题解
我们把贡献拆开来考虑,发现每一道题目,它做一次就会产生
第二步的推导是因为
直接将两部分的贡献加起来就行了。
code
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5,P=998244353;
int n,u,v,a,b,s1,s2,p,fac[N],ifac[N];
inline void Add(int &x,int y) { x+=y-P; x+=(x>>31)&P; }
inline int C(int x,int y) { return 1LL*fac[x]*ifac[y]%P*ifac[x-y]%P; }
inline int Power(int a,int b) { int res=1; for(;b;b>>=1,a=1LL*a*a%P) if(b&1) res=1LL*res*a%P; return res; }
int main() {
cin>>n>>u>>v>>a>>b;
p=1LL*u*Power(v,P-2)%P;
s1=1LL*a*n%P*Power((1-p+P)%P,P-2)%P;
fac[0]=ifac[0]=1;
for(int i=1;i<=n;i++) fac[i]=1LL*fac[i-1]*i%P;
ifac[n]=Power(fac[n],P-2);
for(int i=n-1;i>=1;i--) ifac[i]=1LL*ifac[i+1]*(i+1)%P;
for(int i=1,o=p;i<=n;o=1LL*o*p%P,i++)
if(i&1) Add(s2,1LL*C(n,i)*Power((1-o+P)%P,P-2)%P);
else Add(s2,P-1LL*C(n,i)*Power((1-o+P)%P,P-2)%P);
Add(s1,1LL*s2*b%P);
cout<<s1<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现