zoukankan      html  css  js  c++  java
  • BZOJ 1833: [ZJOI2010]count 数字计数 [数位DP]

    1833: [ZJOI2010]count 数字计数

    题意:统计([l,r])所有数中每个数码出现次数


    之前做的数位DP都是统计数有多少个,这个是统计数码

    我们一个一个数码统计


    如果不考虑前导0和天际线,我们可以直接递推i位数中每个数码出现次数(f[i]=f[i-1]*10+10^{i-1})
    当然不提前递推等着dfs完成也可以


    同样用记忆化搜索来处理前导0和天际线
    前导0只对统计0出现次数有影响,这时候当前位放0对0的出现次数没有贡献
    天际线存在,当前位放要统计的数字时,当前位的贡献是后面的数位考虑天际线合法的方案数
    否则,后面任意放都是合法的,即(10^{d-1})

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    const int N=15;
    inline ll read(){
    	char c=getchar();ll x=0,f=1;
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    	return x*f;
    }
    
    int a[N], len;
    ll l,r;
    ll Pow[N], ans[N], f[N], Qow[N];
    ll dfs(int d, int zero, int sky, int x) { 
    	if(d==0) return 0;
    	if(!sky && !zero) return f[d];
    	int lim = sky ? a[d] : 9; ll now=0;
    	for(int i=0; i<=lim; i++) {
    		if(x==0 && zero) 
    			now += dfs(d-1, zero && i==0, sky && i==lim, x);
    		else if(i==x) {
    				if(sky && i==lim) now += Qow[d-1] + dfs(d-1, zero && i==0, 1, x);
    				else now += Pow[d-1] + dfs(d-1, zero && i==0, 0, x);
    		} else now += dfs(d-1, zero && i==0, sky && i==lim, x);
    	}
    	return (sky || zero) ? now : f[d]=now;
    }
    ll cal(ll n, int x) {
    	len=0;
    	while(n) a[++len]=n%10, n/=10;
    	Qow[0]=1;
    	for(int i=1; i<=len; i++) Qow[i] = Qow[i-1] + a[i]*Pow[i-1];
    	return dfs(len, 1, 1, x);
    }
    int main() {
    	freopen("in","r",stdin);
    	l=read(); r=read();
    	f[1]=1; Pow[0]=1;
    	for(int i=1; i<=12; i++) Pow[i] = Pow[i-1]*10;
    	for(int i=2; i<=12; i++) f[i] = f[i-1]*10 + Pow[i-1];
    	for(int i=0; i<=9; i++) ans[i] = cal(r, i) - cal(l-1, i);
    	for(int i=0; i<9; i++) printf("%lld ", ans[i]); printf("%lld",ans[9]);
    }
    
  • 相关阅读:
    【XXE学习】XML外部实体注入
    记一次解密wireshark抓取的冰蝎通信流量
    weblogicSSRF漏洞复现
    解决docker删除加载失败的镜像报错
    【vulapps】Sturcts2 S2-037RCE漏洞复现
    【XSS-labs】level 16-20
    解决docker-compose下载过慢
    【XSS-labs】Level 11-15
    【XSS-labs】level 6-10
    [PHP]用PHP自己写一个基于zoomeye的api(偷懒必备quq)
  • 原文地址:https://www.cnblogs.com/candy99/p/6628988.html
Copyright © 2011-2022 走看看