bzoj3326: [Scoi2013]数数
Description
Input
第一行仅有一个数B,表示数数的进制。
第二行有N +1 个数,第一个数为N,表示数L 在B 进制下的长度为N,接下里的N个数从高位到低位的表示数L 的具体每一位。
第三行有M+ 1 个数,第一个数为M,表示数R 在B 进制下的长度为M,接下里的M个数从高位到低位的表示数R 的具体每一位。
20% 数据,0 <= R <= L <= 10^5。
50% 数据,2 <= B <= 1000,1 <= N,M <= 1000。
100% 数据,2 <= B <= 10^5,1 <= N,M <= 10^5。
Output
#include<bits/stdc++.h>
typedef unsigned long long u64;
const int P=,N=2e5+;
char buf[],*ptr=buf+;
int G(){
if(ptr-buf==)fread(ptr=buf,,,stdin);
return *ptr++;
}
int _(){
int x=;
if(ptr-buf<){
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
}else{
int c=G();
while(c<)c=G();
while(c>)x=x*+c-,c=G();
}
return x;
}
int fix(int x){return x+(x>>&P);}
struct num{
int a;
num(int x=):a(x){}
num operator+(num x){return fix(a+x.a-P);}
num operator-(num x){return fix(a-x.a);}
num operator*(num x){return u64(a)*x.a%P;}
};
num S(num l,num r){
return (u64(l.a+r.a)*(r.a-l.a+)>>)%P;
}
int B,n,m;
int ns[N],ms[N];
num v0[N],v1[N],pw[N],ps[N],f0[N][],f1[N][];
num cal(int*a,int n){
num s=,r0=,r1=;
for(int i=;i<n;++i)s=s+(v1[i-]+v0[i-])*(B-)+S(,B-)*ps[i-]*pw[i-];
for(int i=n;i;--i){
int L=(i==n),R=a[i]-;
if(L<=R){
num D=R-L+;
num z0=v0[i-]*D+S(L,R)*ps[i-]*pw[i-];
num z1=v1[i-]*D+z0;
s=s+z1+(r1+r0*(ps[i]-))*D*pw[i-]+z0*(n-i);
}
r0=r0*B+num(a[i])*(n-i+);
r1=r1+r0;
}
return s;
}
int main(){
B=_();
n=_();
for(int i=n;i;--i)ns[i]=_();
m=_();
for(int i=m;i;--i)ms[i]=_();
++ms[];
for(int i=;ms[i]==B;++ms[i+],ms[i]=,++i);
if(ms[m+])++m;
ps[]=pw[]=;
for(int i=;i<=n||i<=m;++i){
pw[i]=pw[i-]*B;
ps[i]=ps[i-]+pw[i];
v0[i]=v0[i-]*B+S(,B-)*ps[i-]*pw[i-];
v1[i]=v1[i-]*B+v0[i];
}
printf("%d\n",(cal(ms,m)-cal(ns,n)).a);
return ;
}
bzoj3326: [Scoi2013]数数的更多相关文章
- 2019.03.28 bzoj3326: [Scoi2013]数数(数位dp)
传送门 题意: 一个人数数,规则如下: 确定数数的进制B 确定一个数数的区间[L, R] 对于[L, R] 间的每一个数,把该数视为一个字符串,列出该字符串的所有连续子串对应的B进制数的值. 对所有列 ...
- 洛谷:P3281 [SCOI2013]数数 (优秀的解法)
刷了这么久的数位 dp ,照样被这题虐,还从早上虐到晚上,对自己无语...(机房里又是只有我一个人,寂寞.) 题目:洛谷P3281 [SCOI2013]数数 题目描述 Fish 是一条生活在海里的鱼, ...
- 【BZOJ 3326】[Scoi2013]数数
题目描述 Fish 是一条生活在海里的鱼,有一天他很无聊,就开始数数玩.他数数玩的具体规则是: 确定数数的进制B 确定一个数数的区间[L, R] 对于[L, R] 间的每一个数,把该数视为一个字符串, ...
- BZOJ 3326 [SCOI2013]数数 (数位DP)
洛谷传送门 题目: Fish 是一条生活在海里的鱼,有一天他很无聊,就开始数数玩.他数数玩的具体规则是: 确定数数的进制$B$ 确定一个数数的区间$[L, R]$ 对于$[L, R] $间的每一个数, ...
- bzoj 3530: [Sdoi2014]数数 数位dp
题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- COJ 0036 数数happy有多少个?
数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...
随机推荐
- Oracle11g 表空间使用监控
SELECT * FROM (select * from (select a.TABLESPACE_NAME TABLESPACE_NAME,(a.total || 'M') AS "SUM ...
- 用sql + Ado设置access的字段的默认值
procedure TFormLOrder.ModifyDB; var F: Integer; begin with TADOQuery.Create(nil) do try // Connectio ...
- 面试题13:在O(1)时间删除链表节点
http://blog.csdn.net/jsqfengbao/article/details/47175249
- 设置MyEclipse字体大小
设置MyEclipse字体大小
- git操作远端分支(转)
http://www.cnblogs.com/Camier-myNiuer/p/5558884.html 原文地址:http://hi.baidu.com/lingzhixu/blog/item/4a ...
- struts2.properties
#action后缀struts.action.extension=action#上传文件的工作目录与文件的最大尺寸struts.multipart.saveDir=struts.multipart.m ...
- 201621123010《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...
- UINavigationController详细(转)
UINavigationController使用详解 有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINa ...
- NBUT 1225 NEW RDSP MODE I 2010辽宁省赛
Time limit 1000 ms Memory limit 131072 kB Little A has became fascinated with the game Dota recent ...
- WEB接口测试之Jmeter接口测试自动化 (三)
接口测试与数据驱动 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程. 2 数据驱动与jmeter接口测试 我们已经简单介绍了 ...