zoukankan      html  css  js  c++  java
  • 【hdu2809】 不要62

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

    题意

      求区间${[n,m]}$中不含有62和4的数的个数。

    Solution

      数位dp板子。

    代码

    // hdu2089
    #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;
    
    int t[10],f[10][10],g[10];
    int ans,a[2],n;
    
    void solve(int p) {
    	for (n=0;a[p];a[p]/=10) t[++n]=a[p]%10;
    	memset(f,0,sizeof(f));memset(g,0,sizeof(g));
    	if (t[1]!=4) g[1]=1;
    	for (int i=0;i<10;i++) if (i!=4) f[1][i]=1;
    	for (int i=2;i<=n;i++) {
    		for (int j=0;j<10;j++) {
    			if (j==4) continue;
    			for (int k=0;k<10;k++)
    				if (j!=6 || k!=2) f[i][j]+=f[i-1][k];
    		}
    		if (t[i]==4) continue;
    		for (int k=0;k<t[i-1];k++) if (t[i]!=6 || k!=2) g[i]+=f[i-1][k];
    		if (t[i]!=6 || t[i-1]!=2) g[i]+=g[i-1];
    	}
    	if (!p) p=-1;
    	for (int i=1;i<n;i++)
    		for (int j=1;j<10;j++) ans+=p*f[i][j];
    	for (int i=1;i<t[n];i++) ans+=p*f[n][i];
    	ans+=p*g[n];
    }
    int main() {
    	while (scanf("%d%d",&a[0],&a[1])!=EOF) {
    		if (!a[0] && !a[1]) break;
    		a[0]--;ans=0;
    		solve(0);solve(1);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    相关分析[SDOI2017]
    排序[HEOI2016/TJOI2016]
    逆序对[AHOI2008]
    逆序对数列[HAOI2009]
    小Z的袜子「2009国家集训队」
    http抓包—Content-Type讲解
    mysql——leetcode问题记录
    linux--vi命令
    Linux—echo命令
    Linux—文件命令之touch命令
  • 原文地址:https://www.cnblogs.com/MashiroSky/p/6396150.html
Copyright © 2011-2022 走看看