首页 > 其他 > 详细

BZOJ 1799 同类分布

时间:2016-12-31 23:53:26      阅读:147      评论:0      收藏:0      [点我收藏+]

一开始没想出来。。一看题解

我艹直接枚举数位的和啊。。。。。怪不得给50s。

还是太蠢。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long l,r,bit[20],ret=0,dp[20][170][170],vis[20][170][170],tot=0;
void get_bit(long long x)
{
    ret=0;
    while (x) {bit[++ret]=x%10;x/=10;}
}
long long dfs(long long pos,long long ret1,long long ret2,bool flag,long long mod)
{
    if (!pos) return ((ret1==mod) && (!ret2));
    if ((!flag) && (vis[pos][ret1][ret2]==tot)) return dp[pos][ret1][ret2];
    long long ans=0,up=flag?bit[pos]:9;
    for (long long i=0;i<=up;i++)
        ans+=dfs(pos-1,ret1+i,(ret2*10+i)%mod,flag&&(i==bit[pos]),mod);
    if (!flag) dp[pos][ret1][ret2]=ans,vis[pos][ret1][ret2]=tot;
    return ans;
}
long long work(long long x)
{
    get_bit(x);
    long long ans=0;
    for (long long i=1;i<=ret*9;i++)
    {
        tot++;
        ans+=dfs(ret,0,0,1,i);
    }
    return ans;
}
int main()
{
    scanf("%lld%lld",&l,&r);
    printf("%lld\n",work(r)-work(l-1));
    return 0;    
}

 

BZOJ 1799 同类分布

原文:http://www.cnblogs.com/ziliuziliu/p/6240428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!