【NOIP2016提高A组模拟9.24】我的快乐时代
2016-09-28 19:21
513 查看
Description
Input
一行,两个整数l,r 。Output
一行,一个整数,表示第l 天到第r 天的愉悦值的和。Sample Input
Input 164 89
Input 2
3 233
Input 3
2333333333 66666666666666
Sample Output
Output 11818
Output 2
8730
Output 3
836269739
Data Constraint
l<=r<=1018Solution
首先要%一发出题人的语文功底接着%题目主人公WerKeytom_FTD
设一个get(r)表示从1到r的和
答案就是get(r)-get(l-1)
那么如何求get?
设要求得是get(n)
分为两种情况,位数=n和位数
Code
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define mo 1000000007ll #define fo(i,a,b) for(ll i=a;i<=b;i++) #define fd(i,a,b) for(ll i=a;i>=b;i--) using namespace std; ll a[30],f[30][2],mi[30]; ll sl(ll n) { ll m=0,ans=0; for(ll i=n;i;i/=10) a[++m]=i%10; fo(l,1,m-1) { if (l==1)fo(x1,1,9) ans=(ans+(((x1*x1)%mo)*max(mi[l-2],1ll))%mo)%mo; else fo(x1,1,9) fo(x2,1,9) ans=(ans+(((x1*x2*2ll)%mo)*max(mi[l-2],1ll))%mo)%mo; fo(p,2,l-1) { int q=l-p+1; fo(x1,1,9) fo(x2,1,9) if(p!=q||x1==x2) if(p!=q) ans=(ans+(((x1*x2)%mo)*mi[l-3]*9ll)%mo)%mo; else ans=(ans+(((x1*x2)%mo)*mi[l-2]*9ll)%mo)%mo; } } fo(p,1,m) { ll q=m-p+1; fo(x1,1,9) fo(x2,1,9) if(p!=q||x1==x2) { memset(f,0,sizeof(f)); if(p!=m&&q!=m) f[m][1]=1ll,f[m][0]=a[m]-1ll; if(p==m) if(x1<a[m]) f[m][0]=1ll,f[m][1]=0ll; else if(x1==a[m]) f[m][0]=0ll,f[m][1]=1ll; else continue; if(q==m) if(x2<a[m]) f[m][0]=1ll,f[m][1]=0ll; else if(x2==a[m]) f[m][0]=0ll,f[m][1]=1ll; else continue; fd(i,m,1) { int jy=0;if(i==m) jy=1; if(i==p) { if(x1==a[i])f[i][1]=(f[i][1]+f[i+1][1])%mo; if(x1<a[i]) f[i][0]=(f[i][0]+f[i+1][1])%mo; f[i][0]=(f[i][0]+f[i+1][0])%mo; } else if(i==q) { if(x2==a[i])f[i][1]=(f[i][1]+f[i+1][1])%mo; if(x2<a[i]) f[i][0]=(f[i][0]+f[i+1][1])%mo; f[i][0]=(f[i][0]+f[i+1][0])%mo; } else fo(e,jy,9) { if(e==a[i]) f[i][1]=(f[i][1]+f[i+1][1])%mo; if(e<a[i]) f[i][0]=(f[i][0]+f[i+1][1])%mo; f[i][0]=(f[i][0]+f[i+1][0])%mo; } } ans=(ans+x1*x2*(f[1][0]+f[1][1]))%mo; } } return ans; } int main() { mi[0]=1;fo(i,1,19) mi[i]=(mi[i-1]*10)%mo; ll l,r;scanf("%lld%lld",&l,&r); printf("%lld",(sl(r)-sl(l-1)+mo)%mo); }
相关文章推荐
- JavaEE之第五课时
- 常用电脑快捷键
- Win10 64位系统下Python 及 Numpy , matplotlib,scipy工具包的安装
- 匿名函数与函数表达式
- G - N!Again
- [codevs1021] 玛丽卡
- C#接口和类有什么异同。
- 自定义弧形进度条
- jointJS(二)--jointJS官方版本的一个改造bottomtopmodel
- C语言中的变量常量
- wait()和notify()、notifyAll()
- bzoj2661(网络流)
- Mapreduce理解
- 谭浩强C程序设计第三版习题7.15
- 二分图求最大匹配,匈牙利
- Android一些重要的工具类
- Apache的prefork模式和worker模式
- Java内存区域
- 什么时候使用抽象类,什么时候用接口?
- LinkedList和ArrayList的区别