zoukankan      html  css  js  c++  java
  • Luogu-3413 SAC#1

    吐槽一下自己代码里长的一匹的状态...

    (f[1000][10][10][2][2][2][2])分别记录当前位,前一位值,前前位值,是否有前导零,是否前一个有前导零,是否有上限,是否已经满足条件

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=1e3+100,P=1e9+7;
    int a[maxn],b[maxn],f[maxn][10][10][2][2][2][2],num;
    char s[maxn];
    void read(int *x){
    	scanf("%s",s+1);
    	x[0]=strlen(s+1);
    	for(int i=1,L=strlen(s+1);i<=L;i++)
    		x[i]=s[L-i+1]-'0';
    }
    int dfs(int *c,int wei,int last,int bef,int qdl,int bdl,int xz,int ok){
    	if(wei==0) return ok;
    	int &ans=f[wei][last][bef][qdl][bdl][xz][ok],lim=xz?c[wei]:9;
    	if(ans) return ans;
    	for(int i=0;i<=lim;i++){
    		int p=0;
    		if((!qdl&&last==i)||(!bdl&&bef==i))
    			p=1;
    		ans+=dfs(c,wei-1,i,last,qdl&&!i,qdl,xz&&i==lim,ok|p);
    		ans%=P;
    	}
    	return ans;
    }
    inline int work(int *c){
    	memset(f,0,sizeof(f));
    	return dfs(c,c[0],0,0,1,1,1,0);
    }
    int main(){
    	read(a),read(b);
    	for(int i=1;i<=a[0];i++)
    		if(a[i]==0) a[i]=9;
    		else{
    			a[i]--;
    			if(!a[i]&&i==a[0]) a[0]--;
    			break;
    		}
    	printf("%d
    ",(work(b)-work(a)+P)%P);
    	return 0;
    }
    
  • 相关阅读:
    React.Fragment
    微信分享
    视频H5 video标签最佳实践
    详解vue2.0+vue-video-player实现hls播放全过程
    call()和appl()的理解
    JS 原生面经从初级到高级
    vue面试
    面试题2
    IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
    DDD关键知识点整理汇总
  • 原文地址:https://www.cnblogs.com/nianheng/p/9921537.html
Copyright © 2011-2022 走看看