zoukankan      html  css  js  c++  java
  • 【hdu3555】 Bomb

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 (题目链接)

    题意

      求区间${[1,n]}$含有49的数的个数。

    Solution

      数位dp,先求出不含49的,再减一下就好了。

    细节

      LL

    代码

    // hdu3555
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    #define LL long long
    #define inf (1ll<<30)
    #define MOD 1004535809
    #define Pi acos(-1.0)
    #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
    using namespace std;
    
    LL f[20][10],g[20],m,ans;
    int t[20],n;
    
    int main() {
    	int T;scanf("%d",&T);
    	while (T--) {
    		scanf("%lld",&m);ans=m;
    		for (n=0;m;m/=10) t[++n]=m%10;
    		memset(f,0,sizeof(f));memset(g,0,sizeof(g));
    		g[1]=1;
    		for (int i=0;i<10;i++) f[1][i]=1;
    		for (int i=2;i<=n;i++) {
    			for (int j=0;j<10;j++)
    				for (int k=0;k<10;k++)
    					if (j!=4 || k!=9) f[i][j]+=f[i-1][k];
    			for (int j=0;j<t[i-1];j++) if (t[i]!=4 || j!=9) g[i]+=f[i-1][j];
    			if (t[i]!=4 || t[i-1]!=9) g[i]+=g[i-1];
    		}
    		for (int i=1;i<n;i++)
    			for (int j=1;j<10;j++) ans-=f[i][j];
    		for (int i=1;i<t[n];i++) ans-=f[n][i];
    		ans-=g[n];
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    第二次冲刺(二)
    第二次冲刺(一)
    5月30日学习日志
    5月29日学习日志
    5月28日学习日志
    5月27日学习日志
    5月26日学习日志
    粒子群算法-PSO
    花授粉优化算法-python/matlab
    花授粉优化算法
  • 原文地址:https://www.cnblogs.com/MashiroSky/p/6396178.html
Copyright © 2011-2022 走看看