AGC009E Eternal Average

Posted smyjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AGC009E Eternal Average相关的知识,希望对你有一定的参考价值。

atc

神题orz

那个擦掉\(k\)个数然后写上一个平均值可以看成是\(k\)叉Huffman树的构造过程,每次选\(k\)个点合成一个新点,然后权值设为平均值.这些0和1都会在叶子的位置,同时每个叶子\(i\)的贡献为\(w_i\)(0或1)\(*\frac1k^dep_i\),也就是每过一层这个叶子代表的0或1就要除掉\(k\)加到答案里,这样子算,所有点的贡献之和正好是最终的平均值.还要满足\(\sum_i=1^n\frac1k^dep_i+\sum_j=1^m\frac1k^dep_j=1\),相当于如果全是1那么最后的值也是1.那么\(z\)能被表示成最终的值当且仅当\(z\)能表示成\(m\)\(\frac1k^a_i\)之和,以及\(1-z\)能表示成\(n\)\(\frac1k^b_i\)之和

如果把最终的值写成\(k\)进制小数,也就是\(0.c_1c_2...c_l\),那么\(\sum c=m\),当然这是没考虑进位,每次进位会导致一个\(c_i\ge k\)\(c_i\)\(k\),并且对应的\(c_i-1\)\(1\),那么每次进位都会导致\(\sum c\)减去\(k-1\),所以条件就要改为\(\sum c \equiv m \mod k-1\).然后\(1-z\)\(\sum c\)应该是\(l(k-1)+1-\sum c\),其中前半部分为整数1的\(k\)进制表示,所以在满足上述条件的情况下还满足\(l(k-1)+1-\sum c < n\)以及\(l(k-1)+1-\sum c \equiv n \mod k-1\)

然后dp求方案数.设\(f_i,j\)为考虑\(i\)为,\(\sum c\)\(j\)的方案.注意我们要强制最后一位\(>0\),不然会和前面的方案算重,再加一维\(0/1\)表示末尾是\(0\)还是\(>0\)即可.转移可以前缀和优化

#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double

using namespace std;
const int N=2000+10,mod=1e9+7;
int rd()

    int x=0,w=1;char ch=0;
    while(ch<'0'||ch>'9') if(ch=='-') w=-1;ch=getchar();
    while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48);ch=getchar();
    return x*w;

int n,m,kk,f[2][N][2],pr[N],ans;

int main()

    n=rd(),m=rd(),kk=rd();
    int nw=1,la=0;
    f[0][0][0]=1;
    int lm=max(n,m)<<1;
    for(int i=1;i<=lm;++i)
    
        for(int j=0;j<=m;++j)
        
            pr[j]=j?pr[j-1]:0;
            pr[j]=(pr[j]+(f[la][j][0]+f[la][j][1])%mod)%mod;
            f[la][j][0]=f[la][j][1]=0;
        
        for(int j=0;j<=m;++j)
        
            f[nw][j][0]=(pr[j]-(j?pr[j-1]:0)+mod)%mod;
            if(j) f[nw][j][1]=(pr[j-1]-(j-(kk-1)-1<0?0:pr[j-(kk-1)-1])+mod)%mod;
            if(j%(kk-1)==m%(kk-1)&&(i*(kk-1)+1-j)%(kk-1)==n%(kk-1)&&i*(kk-1)+1-j<=n)
                ans=(ans+f[nw][j][1])%mod;
        
        nw^=1,la^=1;
    
    printf("%d\n",ans);
    return 0;

以上是关于AGC009E Eternal Average的主要内容,如果未能解决你的问题,请参考以下文章

AT2294 Eternal Average

CodeForces - 869B The Eternal Immortality

(后缀数组/Trie)HDU 6138-Fleet of the Eternal Throne

关于ehcache缓存中eternal及timeToLiveSeconds和timeToIdleSeconds的说明

MS17-010 "Eternal Blue(永恒之蓝)”, 修复补丁下载汇总地址!

Eternal Blue永恒之蓝漏洞利用--洪水猛兽