专栏文章

题解:P14321 「ALFR Round 11」D Adjacent Lifting, Fewest Rounds

P14321题解参与者 8已保存评论 8

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
8 条
当前快照
1 份
快照标识符
@minhntlf
此快照首次捕获于
2025/12/02 02:34
3 个月前
此快照最后确认于
2025/12/02 02:34
3 个月前
查看原文
一道培养注意力机制的好题,主要是笔者的水平的太低,没法快速想到正解。
先看小样例:
13579
0088240240161281612814515201451520
发现差不多是 O(n!)O(n!) 级别的:
1!3!5!7!9!
0066 12012050405040362880362880
上面除以下面得到:
13579
0043\frac{4}{3}22165\frac{16}{5}44
改一下分母:
13579
02\frac{0}{2}43\frac{4}{3}84\frac{8}{4}165\frac{16}{5}246\frac{24}{6}
发现分母为 n+32\frac{n+3}{2}
而分子可以表示为:
13579
1211^2-1222^23213^2-1424^25215^2-1
注意到分子在 n+32\frac{n+3}{2} 为奇数时为 (n+12)2\left(\frac{n+1}{2}\right)^2,偶数时为 (n+12)21\left(\frac{n+1}{2}\right)^2-1。或者写为 (n+12)2((n+12)mod2)\left(\frac{n+1}{2}\right)^2-\left(\left(\frac{n+1}{2}\right)\mod 2\right)
综上所述,答案即为 (n+12)2((n+12)mod2)n+32n!\frac{\left(\frac{n+1}{2}\right)^2-\left(\left(\frac{n+1}{2}\right)\mod 2\right)}{\frac{n+3}{2}}n!
线性求逆元和阶乘,O(1)O(1) 回答。时间复杂度 O(n+T)O(n+T)
参考代码:
CPP
#include<iostream>
using namespace std;
using ll=long long;
const ll N=1e7;
ll mod;
ll inv[N+10],fac[N+10];
int main(){
    int t;
    cin>>t>>mod;
    fac[0]=1;
    inv[1]=1;
    for(int i=1;i<=N;++i)fac[i]=fac[i-1]*i%mod;
    for(int i=2;i<=N;++i)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    for(;t;--t){
        ll n;
        scanf("%lld",&n);
        printf("%d\n",fac[n]*inv[(n+3)/2]%mod*((n+1)*(n+1)/4%mod-(n+1)/2%2)%mod);
    }
}

评论

8 条评论,欢迎与作者交流。

正在加载评论...