zoukankan      html  css  js  c++  java
  • [HDU4507]吉哥系列故事——恨7不成妻

    写完忘了账号,试了N久。记搜的时候mod了N次,还是不对。发现自己SB的把solve里面传的值写成int了。。。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cctype>
    using namespace std;
    const int mod=1e9+7;
    struct Node{
    	long long cnt,sum,sqsum;
    };
    long long wei,a[21],T,ans;long long l,r,poww[25];
    Node f[21][8][8];
    Node dfs(int pos,int m7,int wm7,bool lim) {
    	if(pos==-1) {
    		return (Node){m7&&wm7,0,0};
    	}
    	if(~ f[pos][m7][wm7].cnt&&lim==false) return f[pos][m7][wm7];
    	int mx=lim?a[pos]:9;
    	Node dp;
    	dp.cnt=dp.sqsum=dp.sum=0;
    	for(int i=0;i<=mx;i++) {
    		if(i==7) continue;
    		Node tmp=dfs(pos-1,(m7*10+i)%7,(wm7+i)%7,lim&&(i==mx));
    		dp.cnt=(dp.cnt+tmp.cnt)%mod;
    		dp.sum=(dp.sum+tmp.sum%mod+(poww[pos]*i)%mod*tmp.cnt%mod)%mod;
    		dp.sqsum=(dp.sqsum+(2*poww[pos]*i)%mod*tmp.sum%mod+(tmp.cnt*poww[pos])%mod*poww[pos]%mod*i%mod*i%mod+tmp.sqsum)%mod;
    	}
    	if(!lim) f[pos][m7][wm7]=dp;
    	return dp;
    }
    long long solve(long long x) {
    	memset(f,-1,sizeof f);wei=0;
    	while(x) a[wei++]=x%10,x/=10;
    	return dfs(wei-1,0,0,1).sqsum;
    }
    int main() {
    	freopen("in.txt","r",stdin);//freopen("out1.txt","w",stdout);
    	poww[0]=1;
    	for(int i=1;i<=20;i++) poww[i]=(poww[i-1]*10)%mod;
    	for(int i=0;i<20;i++)
    	for(int j=0;j<8;j++)
    	for(int k=0;k<8;k++)
    	f[i][j][k].cnt=-1;
    	cin>>T;
    	while(T--){
    		cin>>l>>r;
    		ans=solve(r)-solve(l-1);ans=(ans%mod+mod)%mod;
    		printf("%d
    ",ans);
    	}
    }
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    wpf-x-指令元素
    意法半导体STM32单片机特性
    非易失性存储器MRAM的两大优点
    静态SDRAM和动态SDRAM的区别
    使用SRAM如何节省芯片面积
    不同类别存储器基本原理
    串口SRAM和并口SRAM的引脚区别
    SRAM存储器芯片地址引脚线短路检测方法
    2020年国内MCU市场有望突破500亿元
    MRAM可以替代NOR或SRAM
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9477552.html
Copyright © 2011-2022 走看看