专栏文章
P14461 【MX-S10-T2】『FeOI-4』青年晚报 题解
P14461题解参与者 2已保存评论 3
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @minbjenx
- 此快照首次捕获于
- 2025/12/01 23:43 3 个月前
- 此快照最后确认于
- 2025/12/01 23:43 3 个月前
思路分析:
首先整理式子得出:
的递推式与之相同。那么 可以直接递推推到的就是偶数的 。对于奇数,推到 ,再暴力做一次即可。接下来只考虑偶数时 如何求解。
观察数据范围不难发现正解应该是 的做法,考虑计算 对 的贡献:
-
首先有当 时, 始终为 。
-
对于左边的, 的系数为 , 的系数为 , 的系数为 ……。
-
整理发现每次对系数做如下修改:
- 修改正负号(即 )。
- 增加递推系数(即 )。
- 修改贡献次数(即 )。
于是我们找到了这题的规律!
AC Code:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5010,mod=1e9+7;
int inv[N],f[N],g[N],F[N],G[N];
int qpow(int x,int y){
int res=1;
while(y){
if(y&1)res=res*x%mod;
x=x*x%mod,y>>=1;
}return res;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++)inv[i]=qpow(i,mod-2);
for(int i=0;i<=m;i++)cin>>F[i];
for(int i=0;i<=m;i++)cin>>G[i];
for(int i=m;i>=0;i--)
for(int j=i,k=0,p=1,q=1;j<=m;)
f[i]+=p*q%mod*F[j]%mod,f[i]%=mod,
g[i]+=p*q%mod*G[j]%mod,g[i]%=mod,
j+=2,p=(mod-j)*(j-1)%mod*p%mod,
k++,q=(n/2-k+1)*inv[k]%mod*q%mod;
for(int i=0;i<=m;i++)
cout<<(n&1?(g[i]+(i+1)*g[i+1]%mod+mod)%mod:f[i])<<" \n"[i==m];
for(int i=0;i<=m;i++)
cout<<(n&1?(f[i]-(i+1)*f[i+1]%mod+mod)%mod:g[i])<<" \n"[i==m];
return 0;
}
完结撒花!!!
相关推荐
评论
共 3 条评论,欢迎与作者交流。
正在加载评论...