首页 > 其他分享 >Luogu P1999

Luogu P1999

时间:2023-04-24 19:47:06浏览次数:43  
标签:平移 int Luogu ll 元素 ans P1999 Mod

题目传送门

初中数学老师在平面几何的第一节课就和我们说过:

点动成线,线动成面,面动成体。

即,由 \(i-1\) 维元素变化到 \(i\) 维的过程,就可以认为是将 \(i-1\) 维物体沿第 \(i\) 个方向平移的过程。

因此我们考虑一个二维的正方形平移得到三维的正方体的过程:

如果我们以平面的个数作为研究对象,不难看出,正方体中存在的平面有如下两个来源:

  1. 原来图形中的平面在经过平移后数量翻倍
  2. 原来的图形中的每一条线段在经过平移后都生成一个新的平面

推广到普遍结论:

  1. \(i-1\) 维元素中的 \(j\) 维元素在经过平移后数量翻倍
  2. \(i-1\) 维元素中的 \(j-1\) 维元素在经过平移后都生成一个新的 \(j\) 维元素

因此,如果我们设 \(f_{i,j}\) 为一个 \(i\) 维物体中 \(j\) 维元素的数量,并把不存在的元素,如 \(f_{i,-1}\) 和 \(f_{i,i+1}\) 等都看作 \(0\) ,我们可以得出如下递推式:

\[f_{0,0}=1 \]

\[f_{i,j}=2f_{i-1,j}+f_{i-1,j-1} \]

优化一下空间,我们可以写出如下的代码:

f[0][1]=1;//为了防止负下标溢出,将j统一加一
for(int i=1;i<=a;i++)
    for(int j=i+1;i>0;j--)
        f[j]=(2*f[j]+f[j-1])%Mod;
cout<<f[b+1]<<endl;

但是由于时间复杂度太过爆炸TLE了五个点……

接下来可以考虑根据生成函数优化:

设 \(F_i(x)\) 为第 \(i\) 行的生成函数,根据上述递推式,有:

\[F_0(x)=1 \]

\[F_i(x)=(x+2)F_{i-1}(x) \]

可以得出:

\[F_i(x)=(x+2)^i \]

则有:

\[f_{i,j}=[j](x+2)^i \]

根据二项式定理:

\[(a+b)^n=\sum_{i=0}^n \binom{n}{i}a^ib^{n-i} \]

则有:

\[f_{i,j}=\binom{i}{j}2^{i-j} \]

因此只需要 \(O(n)\) 分别求出阶乘和阶乘的逆元即可。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll fac[100005]={1},inv[100005];
constexpr ll Mod=1e9+7;
ll qpow(ll a,ll b){//快速幂
    ll ans=1;
    while(b){
        if(b&1)ans=ans*a%Mod;
        a=a*a%Mod;
        b>>=1;
    }
    return ans;
}
int main(){
    int a,b;cin>>a>>b;
    if(a<b)return cout<<0,0;
    for(int i=1;i<=a;i++)fac[i]=fac[i-1]*i%Mod;
    inv[a]=qpow(fac[a],Mod-2);//费马小定理
    for(int i=a-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)%Mod;
    cout<<qpow(2,a-b)*fac[a]%Mod*inv[b]%Mod*inv[a-b]%Mod;
    return 0;
}

标签:平移,int,Luogu,ll,元素,ans,P1999,Mod
From: https://www.cnblogs.com/untitled0/p/luogu-p1999.html

相关文章

  • Luogu_P1613 跑路 题解
    发现和最短路差不多,不过不能朴素的跑最短路。考虑对于每两个相隔\(2\)的整数次幂的点建边,在这个新图上跑最短路就是答案。设\(f_{i,j,k}\)表示从点\(i\)跳\(2^k\)步能否到点\(j\),转移方程就是一个普通的倍增。如果点\(i\)和点\(j\)可以一步到达,那么就在新图上建一条......
  • luogu P3308 [SDOI2014]LIS
    题面传送门涨知识了,第一次知道网络流删边不用全图重跑。首先我们先跑一个暴力dp,出\(f_i\)表示以\(i\)结尾的最长上升子序列长度。然后我们将其按照这个dp值分层,相......
  • 【NOIP2015】【Luogu2615】神奇的幻方(模拟填数)
    problem给一定n*n的矩阵,要求填上1~n*n的数,使之每行、列、对角线的和都相等。n为奇数时,按如下步骤构建:1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右......
  • luogu P7520 [省选联考 2021 A 卷] 支配
    题面传送门自己瞎胡的支配树,可能是错的(大雾首先我们可以证明,支配关系成树。考虑一个点\(x\)的两个受支配点\(y,z\),这两个点应该在一条路径上,如果\(y,z\)之间没有支......
  • luogu P9120 [春季测试 2023] 密码锁
    题面传送门题目中明摆着让你对\(k\)不同的情况讨论,并且难度应该是递增的。Section1:\(k=1\)应该不用我教你怎么做吧Section2:\(k=2\)最大值最小下意识二分转化成判......
  • luogu P7599 [APIO2021] 雨林跳跃
    题面传送门我成功了,我不再是以前那个我了!我们发现部分分里面有个单点跳到单点,尝试考虑这个部分分。一个点有两个点可以跳,贪心地想,如果我先跳了比较矮的那个,那么再一步能......
  • luogu P4566 [CTSC2018]青蕈领主
    题面传送门最后这个转化非常牛逼啊!首先我们可以证明:一个合法的序列中,这样的极长连续区间不会相交。Proof:如果相交了,说明相交的区间也是一段连续区间,而每个区间不相交的......
  • luogu「P4313」文理分科 解题报告
    题目描述文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过)小P所在的班级要进行文理分科。他的班级可以用一个\(n\timesm\)的矩阵进行描述,每个格子......
  • luogu P8341 [AHOI2022] 回忆
    题面传送门恭喜你发现一只写挂了却质疑自己贪心错了的纯纯sb。首先一个简单的猜想就是维护每个子树内向上的路径,如果两个子树之间路径可以合并就合并。但是这是有问题的......
  • luogu P8367 [LNOI2022] 盒
    题面传送门比较厉害的题目。首先我们发现我们只需要计算\(i\)和\(i+1\)之间经过的货物数,也即设\(a\)的前缀和为\(Sum\),\(b\)的前缀和为\(c\),则\(i\toi+1\)......