【JZOJ 4799】我的快乐时代
2016-09-28 19:35
381 查看
Description
Solution
这个很显然可以一位一位的来处理,把答案拆成∑ni=0joy(i)−∑mi=0joy(i),
对于一个位数小于n的数的两两对应的不同位置,很想然有45∗45∗(10j−3∗9)∗2(j为位数),同位为45∗45∗(10j−2∗9),
而同位的,像数位DP一样,注意一下界限即可,
注意:本题细节特多!!!
复杂度:<O(183)
Code
#include<iostream> #include<cstdio> #include<cstdlib> #define fo(i,a,b) for(LL i=a;i<=b;i++) #define fod(i,a,b) for(LL i=a;i>=b;i--) using namespace std; typedef long long LL; const int N=25,mo=1e9+7; LL shi ; LL m,n,ans,a ; LL s ; LL max(LL q,LL w){return q>w?q:w;} int ws(LL q) { a[0]=0; while(q)a[++a[0]]=q%10,q/=10; return a[0]; } LL H(LL n,int l,int r,bool e) { if(l<r)return 0; fo(i,1,r-1)n/=10; return (n%shi[l-r+1]-(LL)e*shi[l-r])%mo; } LL ss(LL n) { if(!n)return 0; int m=ws(n);LL ans=0; s[1][1]=n/10-shi[m-2]+1; fo(i,2,m) fo(j,1,i) if(i==j)s[i][j]=(H(n,m,i+1,1)%mo*shi[i-1]%mo+H(n,i-1,1,0)+1); else s[i][j]=(H(n,m,i+1,1)%mo*shi[i-2]%mo+H(n,i-1,j+1,0)%mo*shi[j-1]%mo+H(n,j-1,1,0)+1)%mo; if(m<2) { fo(i,1,a[1])ans+=i*i; return ans; } ans=285; fo(I,2,m-1) fo(i,1,I/2+I%2) if(i!=I-i+1)ans=(ans+45*45*(i>1?shi[I-3]*9%mo:shi[I-2]%mo)%mo*2)%mo; else ans=(ans+285*shi[I-2]%mo*9); fod(i,m,m-m/2+(!(m%2))) { if(i==m-i+1) { ans=(ans+a[i]*a[i]*s[i][i]%mo)%mo; fo(j,1,a[i]-1)ans=(ans+j*j*(H(n,m,i+1,1)+1)%mo*shi[i-1])%mo; if(H(n,m,i+1,1))fo(j,a[i]+1,9)ans=(ans+j*j*H(n,m,i+1,1)%mo*shi[i-1])%mo; continue; } fo(k,1,a[i]-1)ans=(ans+k*45*(H(n,m,i+1,1)+1)%mo*shi[i-2]*2)%mo; if(H(n,m,i+1,1))fo(k,a[i]+1,9)ans=(ans+k*45*H(n,m,i+1,1)%mo*shi[i-2]*2)%mo; if(a[i])fo(j,1,9) if(j!=a[m-i+1])ans=(ans+a[i]*j*(H(n,m,i+1,1)%mo*shi[2*i-m-2]+H(n,i-1,m-i+2,0)+(j<a[m-i+1]))%mo*shi[m-i]*2)%mo; else ans=(ans+a[i]*j*s[i][m-i+1]*2%mo)%mo; } return ans; } int main() { shi[0]=1;fo(i,1,20)shi[i]=shi[i-1]*10; scanf("%lld%lld",&n,&m); printf("%lld\n",(ss(m)-ss(n-1)+mo)%mo); return 0; }
相关文章推荐
- 列表
- 微信应用号开发必备技能都在这里了啦!
- Linux workqueue工作原理
- Apache默认index页面
- oracle10G/11G官方下载地址集合 直接迅雷下载
- emmet使用简介
- macOS apache配置及开启虚拟服务器的开启,apache开启重写模式
- 什么是SOAP?
- navicat连接oracle数据库ORA-28547:connection to server failed, probable Oracle Net admin error错误,解决方法
- Axure RP 8.0 基础1-10
- Gym 100962A ABBA (高斯消元)
- C# Udp Socket例子 客户端
- 如何生成支付宝RSA密钥
- freemaker学习总结
- vim下各类批量替换
- js三种创建函数的方式
- hihocoder-1391&&北京网赛09 Countries(优先队列)
- 杂文
- 第五周项目一(6)选择结构的使用3
- 最大间隔