BZOJ2757 : [SCOI2012]Blinker的仰慕者
BZOJ AC900题纪念~~
若K>0,则
设f[i][j]表示i位数字,积为j的数字的个数
g[i][j]表示i位数字,积为j的数字的和
DP+Hash预处理
查询时枚举LCP然后统计贡献
若K=0,则
设f[i][j][k][l]表示已知前i位,乘积是否不为0,是否等于x,是否有数字的数字的个数
g[i][j][k][l]表示已知前i位,乘积是否不为0,是否等于x,是否有数字的数字的和
数位DP即可
#include<cstdio>
typedef long long ll;
const int P=20120427,H=1000037,M=66062;
int a[19],len,i,j,k,t,T,g[H],nxt[M],ed;ll n,l,r,K,tmp,pow[19],fin,v[M];
inline int get(ll u){
int x=u%H,i=g[x];
for(;i;i=nxt[i])if(v[i]==u)return i;
return v[++ed]=u,nxt[ed]=g[x],g[x]=ed;
}
inline int ask(ll u){
for(int i=g[u%H];i;i=nxt[i])if(v[i]==u)return i;
return 0;
}
namespace Subtask1{
int f[19][M],g[19][M];
void init(){
f[0][get(1)]=1;
for(i=0;i<18;i++)for(j=1;j<=ed;j++)for(k=1;k<=9;k++){
if(v[j]*k>1000000000000000000LL)break;
(f[i+1][t=get(v[j]*k)]+=f[i][j])%=P;
(g[i+1][t]+=g[i][j]*10+f[i][j]*k)%=P;
}
}
inline ll cal(ll x,ll K){
ll ans=0,pre=0,mul=1;
for(len=0,tmp=x;tmp;a[++len]=tmp%10,tmp/=10);
for(i=len;i;i--){
if(!a[i])break;
for(j=1;j<a[i];j++)if((K%(mul*j))==0){
tmp=K/mul/j;
t=ask(tmp);
(ans+=(pre*10+j)*pow[i-1]%P*f[i-1][t]%P+g[i-1][t])%=P;
}
(pre*=10)+=a[i],mul*=a[i];
}
for(K=ask(K),i=1;i<len;i++)(ans+=g[i][K])%=P;
return ans;
}
}
namespace Subtask2{
ll f[19][2][2][2],g[19][2][2][2];
inline ll cal(ll x){
for(len=0,tmp=x;tmp;a[++len]=tmp%10,tmp/=10);
for(i=1,j=len;i<=len&&i<j;i++,j--)t=a[i],a[i]=a[j],a[j]=t;
for(i=1;i<=len;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)for(t=0;t<2;t++)f[i][j][k][t]=g[i][j][k][t]=0;
for(i=0;i<=a[1];i++)f[1][i>0][i==a[1]][i>0]++,g[1][i>0][i==a[1]][i>0]+=i;
for(i=1;i<len;i++)for(j=0;j<2;j++){
for(k=0;k<=9;k++)(f[i+1][k>0][0][k>0]+=f[i][j][0][0])%=P,(g[i+1][k>0][0][k>0]+=g[i][j][0][0]*10%P+f[i][j][0][0]*k%P)%=P;
for(k=0;k<=9;k++)(f[i+1][j&&k>0][0][1]+=f[i][j][0][1])%=P,(g[i+1][j&&k>0][0][1]+=g[i][j][0][1]*10%P+f[i][j][0][1]*k%P)%=P;
for(k=0;k<=a[i+1];k++)(f[i+1][j&&k>0][k==a[i+1]][1]+=f[i][j][1][1])%=P,(g[i+1][j&&k>0][k==a[i+1]][1]+=g[i][j][1][1]*10%P+f[i][j][1][1]*k%P)%=P;
}
return g[len][0][0][1];
}
}
int main(){
for(pow[0]=i=1;i<19;i++)pow[i]=pow[i-1]*10;
Subtask1::init();
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&l,&r,&K);
if(K)fin=(Subtask1::cal(r+1,K)-Subtask1::cal(l,K))%P;else fin=(Subtask2::cal(r+1)-Subtask2::cal(l))%P;
while(fin<0)fin+=P;
printf("%lld\n",fin);
}
return 0;
}
BZOJ2757 : [SCOI2012]Blinker的仰慕者的更多相关文章
- bzoj2757【scoi2012】Blinker的仰慕者
题目描述 Blinker 有非常多的仰慕者,他给每个仰慕者一个正整数编号.而且这些编号还隐藏着特殊的意义,即编号的各位数字之积表示这名仰慕者对Blinker的重要度. 现在Blinker想知道编号介于 ...
- BZOJ2758 : [SCOI2012]Blinker的噩梦
首先将包含关系建树. 方法是将每个图形拆成上半边和下半边,从左往右扫描线,用Splay从下到上维护扫描线上所有图形. 每次加入一个新的图形$x$的时候,看看它下方第一个图形$y$,如果$y$是上半边, ...
- [BZOJ2758] [SCOI2012]Blinker的噩梦 扫描线+set
题目大意:有n个圆或凸多边形,这些图形不会相交,每当走入或走出一个图形时需要异或上一个代价,有m组操作: 询问操作,每次询问从一个点走到另一个点时,需要的代价(初始代价为0) 修改操作,每次修改一个图 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 近期概况&总结
下午考完英语的学考就要放假啦,是衡中的假期啊QAQ 所以灰常的激动,一点也不想写题(我不会告诉你其实假期只有一个晚上.. 自从CTSC&APIO回来之后就一直在机房颓颓颓,跟着zcg学了很多新 ...
- bzoj2758【scoi2012】Blinker的的噩梦
题目描述 一天Blinker醒来,发现自己成为了一个二维世界的点,而且被标记上了一个奇怪的值. 这个世界是由N个边界互不相交(且不相切)的图形组成,这里图形仅包括圆和凸多边形.每个图形还有一个权值.每 ...
- BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3352 Solved: 919[Submit][Stat ...
- Bzoj2756 [SCOI2012]奇怪的游戏
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3220 Solved: 886 Description ...
- 【BZOJ】【2756】【SCOI2012】奇怪的游戏
网络流-最大流 这题……建模部分先略过 这道题是会卡时限的T_T俺的Dinic被卡了,在此放几篇很棒的讲网络流算法的文章,至于大家耳熟能详的论文就不放了…… http://www.cppblog.co ...
随机推荐
- 彻底理解数字图像处理中的卷积-以Sobel算子为例
彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 2016.08.04 初稿完成 概述 卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨 ...
- Linux&shell之高级Shell脚本编程-创建函数
写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the script function myfun { echo "This i ...
- 转数据库Sharding的基本思想和切分策略
本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一.基本思想 Sh ...
- codeforces 488A. Giga Tower 解题报告
题目链接:http://codeforces.com/problemset/problem/488/A 题目意思:给出一个数a,范围是[-10^9, 10^9],问它最少需要加的一个正整数 b 是多少 ...
- 【USACO】milk3
倒牛奶的问题, 开始看感觉跟倒水的问题很像, 想直接找规律, 写个类似于循环取余的代码. 但后来发现不行,因为这道题有三个桶,水量也是有限制的.只好用模拟的方法把所有的情况都试一遍. 建一个state ...
- 基于gitosis的Git云端服务器配置
(本文需要自己实践,由于时间关系,我仅仅是做了整理和快速的练习,至于笔记中的账号和ip域名都是我参考文章中的.如果读者有任何问题欢迎留言和发邮件到luoquantao@126.com) 硬件:云端阿里 ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
- 谈Web前端安全编码
最近开发中涉及到有关输出正确的HTML标签这样的问题,正好对字符编码这块儿多看看,之前对这个方面认识的不深,思考的确实不够,如果下次再碰见类似的问题,若再次不少时间去调研的花,就得不偿失了. 就像正则 ...
- icon上添加数字提醒
使用viewbadger包: package com.jingle.vierbagerstudy; import android.app.Activity; import android.os.Bun ...
- js iframe onload &line-height浏览器兼容问题
1.IE iframe onload事件 在IE下给iframe添加onload事件经常无效,因为在IE下它最多只能被激活一次,而且无论你有多少个iframe,被激活的也只能是最后一个的.可以用下面的 ...