loj2053 「HNOI2016」大数
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll p, su[100005], sv[100005], ans[100005];
int n, m, uu, vv, ww, cnt[100005], blc, bel[100005];
char ss[100005];
struct Node{
int ll, rr, id;
}q[100005];
void qwq(){
for(int i=1; i<=n; i++){
su[i] = su[i-1];
sv[i] = sv[i-1];
if((ss[i]-'0')%p==0){
su[i] += i;
sv[i]++;
}
}
while(m--){
scanf("%d %d", &uu, &vv);
printf("%lld\n", su[vv]-su[uu-1]-(uu-1)*(sv[vv]-sv[uu-1]));
}
}
bool cmp(Node x, Node y){
if(bel[x.ll]!=bel[y.ll]) return bel[x.ll]<bel[y.ll];
if(bel[x.ll]&1) return x.rr<y.rr;
else return x.rr>y.rr;
}
void pwp(){
ll t=1, now=0;
blc = sqrt(n+1);
for(int i=n; i; i--){
su[i] = (su[i+1] + (ss[i] - '0') * t) % p;
t = t * 10 % p;
sv[++ww] = su[i];
bel[i] = (i - 1) / blc + 1;
}
n++;
su[n+1] = 0;
sv[++ww] = 0;
sort(sv+1, sv+1+ww);
ww = unique(sv+1, sv+1+ww) - (sv + 1);
for(int i=1; i<=n; i++)
su[i] = lower_bound(sv+1, sv+1+ww, su[i]) - sv;
for(int i=1; i<=m; i++){
scanf("%d %d", &q[i].ll, &q[i].rr);
q[i].rr++;
q[i].id = i;
}
sort(q+1, q+1+m, cmp);
int l=q[1].ll, r=l-1;
for(int i=1; i<=m; i++){
while(l<q[i].ll){
cnt[su[l]]--;
now -= cnt[su[l]];
l++;
}
while(l>q[i].ll){
l--;
now += cnt[su[l]];
cnt[su[l]]++;
}
while(r<q[i].rr){
r++;
now += cnt[su[r]];
cnt[su[r]]++;
}
while(r>q[i].rr){
cnt[su[r]]--;
now -= cnt[su[r]];
r--;
}
ans[q[i].id] = now;
}
for(int i=1; i<=m; i++)
printf("%lld\n", ans[i]);
}
int main(){
cin>>p;
scanf("%s", ss+1);
n = strlen(ss+1);
cin>>m;
if(p==2 || p==5) qwq();
else pwp();
return 0;
}
loj2053 「HNOI2016」大数的更多相关文章
- 「HNOI2016」大数
题目描述 给定一个质数\(p\)和一个数字序列,每次询问一段区间\([l,r]\), 求出该序列区间\([l,r]\)内的所有子串,满足该子串所形成的数是\(p\)的倍数(样例的解释也挺直观的) 基本 ...
- 「HNOI2016」数据结构大毒瘤
真是 \(6\) 道数据结构毒瘤... 开始口胡各种做法... 「HNOI2016」网络 整体二分+树状数组. 开始想了一个大常数 \(O(n\log^2 n)\) 做法,然后就被卡掉了... 发现直 ...
- 「HNOI2016」树 解题报告
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写 ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- 「HNOI2016」网络 解题报告
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这 ...
- 「HNOI2016」最小公倍数 解题报告
「HNOI2016」最小公倍数 考虑暴力,对每个询问,处理出\(\le a,\le b\)的与询问点在一起的联通块,然后判断是否是一个联通块,且联通块\(a,b\)最大值是否满足要求. 然后很显然需要 ...
- loj #2051. 「HNOI2016」序列
#2051. 「HNOI2016」序列 题目描述 给定长度为 n nn 的序列:a1,a2,⋯,an a_1, a_2, \cdots , a_na1,a2,⋯,an,记为 a[1: ...
- 【LOJ】#2052. 「HNOI2016」矿区
题解 之前尝试HNOI2016的时候弃坑的一道,然后给补回来 (为啥我一些计算几何就写得好长,不过我写啥都长orz) 我们尝试给这个平面图分域,好把这个平面图转成对偶图 怎么分呢,我今天也是第一次会 ...
- loj#2049. 「HNOI2016」网络(set 树剖 暴力)
题意 题目链接 Sol 下面的代码是\(O(nlog^3n)\)的暴力. 因为从一个点向上只会跳\(logn\)次,所以可以暴力的把未经过的处理出来然后每个点开个multiset维护最大值 #incl ...
随机推荐
- 如何在Ubuntu server中修改IP
详细请移步至博客https://blog.csdn.net/shenzhen_zsw/article/details/74025066 方法一. sudo ifconfig eth0 100.100 ...
- spring中用xml配置构造注入的心得
spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...
- VMware下Centos6.4安装
VMware(Virtual Machine ware)是一个“虚拟PC”软件公司,提供服务器.桌面虚拟化的解决方案. 小伙伴们网上下载VMware11,一路下一步自己安装吧!!! 打开 VMware ...
- shiro无法进入授权的方法org.crazycake.shiro.exception.PrincipalInstanceException: class java.util.HashMap must has getter for field: id
rg.crazycake.shiro.exception.PrincipalInstanceException: class java.util.HashMap must has getter for ...
- linux 命令——51 lsof(转)
lsof(list open files) 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以 如传输控制 ...
- Producer & Consumer
需要与Eureka结合使用 Eureka环境搭建 Producer 一.pom文件 <?xml version="1.0" encoding="UTF-8" ...
- World Wind Java开发之九——阶段小结(转)
http://blog.csdn.net/giser_whu/article/details/42785875 将近一个月没有更新了,一是因为项目的事情,二是期末考试复习,三是玩啦.上一篇博客搭建起了 ...
- 运维如何延续自己的职业生涯--萧田国2017年GOPS深圳站演讲内容
正如 萧田国在2017年GOPS深圳站演讲所提及的,运维职业生涯规划,应该是T字型. 关于指导原则,正如腾讯好友@赵建春所言: 如果一个领域不能做到TOP,那就是一种伤害. 运维在编程.开发领域,能做 ...
- Problem G: 角谷步数
Problem G: 角谷步数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 78 Solved: 28[Submit][Status][Web Bo ...
- python实现链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点 第一种实现: # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # ...