原题的价值 出题人:VFleaking hnoi2015 集训

题目大意:

解题思路:

算法一(10分):

暴力枚举每条边是否选取,然后统计答案就行了,再次不赘述,可以通过测试点1。

算法二(40分):

观察4,5,6测试点,k=0,1,2,打表找规律或者各种乱七八糟的方法都可以找到公式,因为本人过于懒惰(愚蠢),所以不列出式子,让读者自己感受。

算法三(60分):

对于2,3测试点,这时候就只能推导公式了QAQ,首先对于无向图,我们考虑单独的一个节点u,u的度数d有d∈[0,n?1],我们考虑d=i时的情况,首先点u只能连出去n?1条边,所以如果d=i,那么n?1条边中有i条边是存在的,另外的是不存在的,那么贡献为(n?1i)?ik,然后再考虑剩下的与u不相关的(n?1)?(n?2)2边,那么它们是可以任意选择的,所以此时对答案的贡献为2(n?1)?(n?2)2,然后有n个点,所以ans=(∑n?1i=0(n?1i)?ik)?n?2(n?1)?(n?2)2,结合前面的找规律,可以得到60分,时间复杂度nlog2k。

算法四(70分):

对于算法三,瓶颈在于计算∑n?1i=0(n?1i)?ik,那么我们有什么办法可以把这个东西优化一下呢?有的,就是神奇的下降阶乘幂!!!!!!!!!首先显然有(n?1i)?ik?(ik?表示i的k次下阶幂,且i0?=0)=(n?k?1i?k)?nk?,所以我们如果有办法ik将表示成多个i的下阶幂形式就好了,我们令ik=∑kj=0(aj?ij?),然后我们发现aj和第二类斯特林数很像(T^T,其实就是一毛一样啊)。然后我们翻看组合数学或者具体数学应该都可以找到这个式子ik=∑kj=0({kj}?ij?),然后就有ans=(∑n?1i=0(∑kj=0(n?1i)?{kj}?ij?))?n?2(n?1)?(n?2)2

=(∑n?1i=0(∑kj=0(n?j?1i?j)?{kj}?nj?))?n?2(n?1)?(n?2)2

=(∑kj=0(∑n?1i=0(n?j?1i?j)?{kj}?nj?))?n?2(n?1)?(n?2)2

=(∑kj=0(2n?j?1?{kj}?nj?))?n?2(n?1)?(n?2)2

这样就可以在k2时间内算出ans了。然后再结合算法三,就可以得到70分了。

算法五(100分):

观察算法四中的瓶颈,发现在求斯特林数{kj}这里,那么我们有没有什么办法优化呢?答案是有的!!!!!!!!!!!!

根据第二类斯特林数的模型意义(不知道的请上网查吧),根据容斥原理,我们有{kj}=1j!?∑kt=0((?1)t?(jt)?(j?t)k)

=∑kt=0(?1)tt!?(j?t)k(j?t)!如果我们令多项式A(x)=∑kt=0(?1)tt!?xt

B(x)=∑kt=0tkt!,我们不难发现{kj}的各项就是A(x)与B(x)的卷积,并且998244353是可以模意义下FFT的指数,果断上FFT,然后就用klog2k的时间算出了所有的{kj},然后就高高兴兴的AC了。

ps:不要问我怎么写FFT,我也不会T^T………

AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>

using namespace std;

const long long Mod=998244353;
long long n,K;
long long S[100010]={0};
long long N=1;
long long a[300000]={0};
long long b[300000]={0};
long long c[300000]={0};

long long ksm(long long a,long long k,long long MM)
{
    long long o=1;
    for(;k;)
    {
        if(k&1)
            o=(long long)o*a%MM;
        a=(long long)a*a%MM;
        k>>=1;
    }
    return o;
}

void FFT(long long *A,int num,int flag)
{
    for(int i=0;i<num;i++)
    {
        int p=0,s=i;
        for(int j=(num>>1);j>=1;j>>=1)
        {
            p|=(s&1)*j;
            s>>=1;
        }
        if(p>i) swap(A[i],A[p]);
    }
    for(int l=2;l<=num;l<<=1)
    {
        long long w;
        if(flag==1)
            w=ksm(3,(Mod-1)/l,Mod);
        else
        {
            long long help=ksm(3,Mod-2,Mod);
            w=ksm(help,(Mod-1)/l,Mod);
        }
        for(int i=0;i<num;i+=l)
        {
            long long wk=1;
            for(int j=0;j<(l>>1);j++)
            {
                long long u=A[i+j],t=wk*A[i+j+(l>>1)]%Mod;
                A[i+j]=(u+t)%Mod;
                A[i+j+(l>>1)]=(u-t+Mod)%Mod;
                wk=wk*w%Mod;
            }
        }
    }
    if(flag==-1)
        for(int i=0;i<num;i++)
            A[i]=A[i]*ksm(num,Mod-2,Mod)%Mod;
    return;
}

int main()
{
    long long ans=0;
    freopen("value.in","r",stdin);
    freopen("value.out","w",stdout);
    cin>>n>>K;
    long long NI=1;

    long long jiecheng=1;
    int fh=1;
    for(int i=0;i<=K;i++)
    {
        if(i==0)
        {
            a[i]=1;
            b[i]=0;
        }
        else
        {
            jiecheng=jiecheng*ksm(i,Mod-2,Mod)%Mod;
            a[i]=(fh*jiecheng+Mod)%Mod;
            b[i]=ksm(i,K,Mod)*jiecheng%Mod;
        }
        fh*=-1;
    }
    N=1;
    for(;N<K+K+1;N<<=1);

    FFT(a,N,1);
    FFT(b,N,1);
    for(int i=0;i<N;i++)
        c[i]=a[i]*b[i]%Mod;
    FFT(c,N,-1);

    for(long long i=0;i<=K;i++)
    {
        if(NI==0) break;
        if(K==0)
            c[0]=1;
        ans+=c[i]*ksm(2,n-1-i,Mod)%Mod*NI%Mod;
        NI=NI*(n-i-1)%Mod;
        ans%=Mod;
    }
    ans=ans*n%Mod;
    ans=ans*ksm(2,(n-1)*(n-2)/2,Mod)%Mod;
    cout<<ans<<endl;
    fclose(stdin);
    fclose(stdout);
    return 0;
}
时间: 2024-11-13 05:44:12

原题的价值 出题人:VFleaking hnoi2015 集训的相关文章

一道超级坑爹的水题(ACdream oj 无耻的出题人)

 A - 无耻的出题人 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) Submit Status Problem Description 听到X神要参加比赛,只会Fibnacci数的出题人被吓得哭晕在厕所.为了防止X神AK(ALL KILL)比赛题目,无耻的出题人只好在题面上做些手脚(加密).其中一道题的题目描述如下: hjxh dwh v vxxpde,mmo i

虐我半下午的水题(ACdream无耻的出题人)

对于这道题我只想说坑爹.绝对的坑爹. 还有这样出题的..... 无耻的出题人 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 KB (Java/Others) SubmitStatistic Next Problem Problem Description 听到X神要参加比赛,只会Fibnacci数的出题人被吓得哭晕在厕所.为了防止X神AK(ALL KILL)比赛题目,无耻的出题人只好在题面上做些手脚(加密).其中

bzoj-3203 保护出题人

题意: 在一个诡异的植物大战僵尸游戏中,给出n关: 第i关队首僵尸距房门xi,两个僵尸之间间隔为d: 每次在队首添加一个血量为ai的僵尸,其他僵尸不变: 每关在门前放一个攻击力任意的植物,求n关放置植物总攻击力的最小值: n<=100000,其他数据<=10^12: 题解: 题意叙述略诡异..建议还是去看一眼原题: 首先考虑对于每一关的答案,应该是恰好将最难打死的僵尸打死的攻击力值: 令s[i]为i这个僵尸血量与它前面僵尸血量之和,dis[i]为这个僵尸距房门的距离: 那么答案就是ans=ma

浅谈《剑指offer》原题:求1+2+……+n

<剑指offer>上的一道原题,求1+2+--+n,要求不能使用乘除法,for.while.if.else.switch.case等关键字以及条件判断语句(a?b:c). 第一次看到这道题大约有一年的时间了,在霸笔网易的时候,当时我就晕了...心想这是神马东西,后来发现这是原题!!然后后悔自己没看过书了... <剑指offer>上给出了不错的解法,但是这里有个解法更巧妙,虽然技术含量不高,但是可以参考,这就是<程序员面试笔试宝典>中所给出的答案. 解法一:利用宏定义求解

#LOJ2564 SDOI2018 原题识别 主席树

转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半程一直在打T1 觉得考试思路很有意思,于是就顺着打下来了 个人感觉这个是$O(nlogn^{2})$的,但是在loj上我比claris的程序快了1s多,只不过编程复杂度不止翻倍啊…… 下面介绍一下我的解法 其实最早启发我的是链上的部分分 定义$pre_{i}$为i前面最近的和i同色的点的下标,我们把

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst

sdut 2411:Pixel density(第三届山东省省赛原题,字符串处理)

Pixel density Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Pixels per inch (PPI) or pixel density is a measurement of the resolution of devices in various contexts; typically computer displays, image scanners, and digital camera image s

sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)

Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game named "Fruit Ninja"?Fruit Ninja (known as Fruit Ninja HD on the iPad and Fruit Ninja THD for Nvidia Tegra 2 based Android devices) is a video game de

sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a beast caught a beautiful princess and the princess was put in prison. To rescue the princess, a prince who wanted to marry the princess set out immedia