题解 [HNOI2016]大数】的更多相关文章

题目传送门 题目大意 给出一个\(n\)个数的字符串,有\(m\)次查询,对于该串的子串\([l,r]\)有多少个子串满足是固定素数\(p\)的倍数. 思路 其实很简单,但是一开始想偏了...果然还是自己菜啊... 我们可以想到统计一下后缀和\(s[i]\),表示\([i,n]\)构成的数,那么,判断一个区间\([l,r]\)是不是\(p\)的倍数就等价于: \[\dfrac{s[l]-s[r+1]}{10^{n-r}}\equiv 0 \pmod p \] 我们发现如果\(\gcd(10,p)…
[LG3245][HNOI2016]大数 题面 洛谷 题解 60pts 拿vector记一下对于以每个位置为右端点符合要求子串的左端点, 则每次对于一个询问,扫一遍右端点在vector里面二分即可, 虽然空间是平方级别的但是因为数据水还是可以过60的 100pts 记\([i,n]\)表示的数为\(num_i\),则一段区间\([l,r]\)所表示的数为 \[ \frac {num_l-num_{r+1}}{10^{r-l+1}} \] 题目就要使\(\frac {num_l-num_{r+1}…
[BZOJ4542][Hnoi2016]大数 Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行一个串:S…
4542: [Hnoi2016]大数 链接 分析: 如果p等于2或者5,可以根据最后一位直接知道是不是p的倍数,所以直接记录一个前缀和即可. 如果p不是2或者5,那么一个区间是p的倍数,当且仅当$\frac{b[l] - b[r + 1]}{10 ^ {r - l + 1}} = 0 \ (mod \ p)$. 由于p不是2或者5,所以10与p互质,条件转化为$b[r] - b[l] = 0 \ (mod \ p)$ ,于是将b离散化后,莫队即可.代码: #include<cstdio> #i…
题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 \[\sum_{l\le l'\le r'\le r}\min_{i=l'}^{r'}a_i \] 数据范围:\(1\le n,m\le 10^5\),\(|a_i|\le 10^9\). 蒟蒻要练习省选题,结果就遇到这道数据结构(好久没写数据结构题都忘光了).结果正好遇到一道毒瘤题,于是蒟蒻来写…
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数…
题目链接 大数除法是很麻烦的,考虑能不能将其条件化简 一段区间[l,r]|p,即num[l,r]|p,类似前缀,记后缀suf[i]表示[i,n]的这段区间代表的数字 于是有 suf[l]-suf[r+1]|p -> (suf[l]-suf[r+1])%p = 0 -> suf[l] ≡suf[r+1] (mod p) 即若suf[r+1]%p = suf[l]%p,则num[l,r]|p 于是我们可以把范围控制在p以内,查找是否有%p相等的区间 -> 莫队 即小Z的袜子 这样的实际意义是…
题目描述 给出一个数字串,多次询问一段区间有多少个子区间对应的数为P的倍数.其中P为质数. 输入 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数 fr,to,表示对S 的子串S[fr…to]的一次询问.注意:S的最左端的数字的位置序号为 1:例如S为213567,则S[1]为 2,S[1…3]为 213. N,M<=100000,P为素数 输出 输出M行,每行一个整数,第 i行是第 i个询问的答案. 样例输入 11 121121 3 1 6 1 5 1 4 样…
正经题解在最下面 http://blog.csdn.net/qq_32739495/article/details/51286548 写的时候看了大神的题解[就是上面那个网址],看到下面这段话 观察题目,发现一串数s(l~r)整除p满足s(l~n-1)%p==s(r+1~n-1)%p 但p值为2或5不满足这个性质需要特判(不过数据中好像没有,于是笔者没写,有兴趣的可以自己去写写......) 然后问题转化为求一段区间中有几对相等的f值. 看到这里,我感觉豁然开朗,完全忽视了离散化的要求,我以为把…
题目 题解 除了\(5\)和\(2\) 后缀数字对\(P\)取模意义下,两个位置相减如果为\(0\),那么对应子串即为\(P\)的倍数 只用对区间种相同数个数\(x\)贡献\({x \choose 2}\) 经典莫队题 \(P = 2\)或\(5\)就特判一下 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #def…
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4542 题解 Code #include<bits/stdc++.h> using namespace std; typedef long long ll; ll read(){ ll x=,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} return x*f; } struct query{ int l,r,ind; inli…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4542 题解 我们令 \(f_i\) 表示从 \(i\) 到 \(n\) 位组成的数 \(\bmod P\) 的值. 那么一个从 \(l, r\) 的串的权值为 \(\frac{f_l - f_{r+1}}{10^{n-r}}\). 如果需要这个东西 \(=0\),也就是 \[ \frac{f_l - f_{r+1}}{10^{n-r}} = 0 \pmod P \] 下一步显然是要把 \(1…
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数…
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数…
题目描述 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. 输入输出格式 输入格式: 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数…
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345 小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也 是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素 数7的倍数. solution 正解:莫队 知道结论还是比较容易的,但是细节贼多啊. 首先 \(p\)…
题意 题目链接 Sol 莫队板子题.. 维护出每个位置开始的字符串\(mod P\)的结果,记为\(S_i\) 两个位置\(l, r\)满足条件当且仅当\(S_l - S_r = 0\),也就是\(S_l = S_r\) 离散化之后直接上莫队就行了 对\(2, 5\)特判一下,因为2/5是10的因子,可能导致答案变大.直接维护\(0/5\)的出现次数就可以了 考场上一高兴写了三个Subtask.. #include <bits/stdc++.h> #define LL long long us…
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数…
传送门 \(HNOI2019\)前最后一题了qwq 这题要分情况,如果\(p=2\)或\(5\),那么只要区间内最后一个数字是\(p\)的倍数就好了,这个可以莫队,也有更优秀的做法.莫队做法可以看代码懒 否则,考虑一个数怎么表示,记\(s_i\)为前\(i\)为构成的数,可以知道区间\([i,j]\)的数应该是\(s_r-s_{l-1}*10^{r-l+1}\),现在要求这个数模\(p\)为0,那么也就是\[s_r-s_{l-1}*10^{r-l+1}\equiv0\ (\mathrm{mod}…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4542 给定一个由数字构成的字符串${S_{1,2,3,...,n}}$,一个正素数$P$,每次询问给定一对$l$,$r$求: $${\sum_{l=1}^{n}\sum_{r=i}^{n}\left [ \sum _{i=l}^{r}S[i]*10^{r-i} \,\,\,\,MOD\,\,\,\,P=0 \right ]}$$ 即以位置$x$开头的后缀的数字$%P$之后的值为$val[…
这题...离散化...$N$和$n$搞错了...查了$2h$...QAQ 考虑$s[l...r]$,可以由两个后缀$suf[l]-suf[r+1]$得到$s[l...r]$代表的数乘$10^k$得到的结果,如果$p$不为$2$或$5$,即$gcd(p, 10^k)=1$,那么显然$s[l...r]$乘$10^k$模$p$为$0$的话,$s[l...r]$模p也为$0$,所以我们就可以变成询问$[l,r+1]$里有几个相同的后缀了. 如果$p$为$2$或$5$的话,我们还得判断这个数的个位是否是$…
http://www.lydsy.com/JudgeOnline/problem.php?id=4542 (题目链接) 题意 给出一个素数$P$,一个数串$S$,$m$个询问,每次询问区间$[l,r]$的子串中能被$P$整除的个数. Solution 如果$[l,n]$的余数与$[r+1,n]$的余数相等,那么子串$[l,r]$就可以被整除,这很显然,然后问题就转化为了莫队板子,转移hash一下维护个数就好.然而为什么转移不能统一啊!强迫症看着有种想死的冲动啊! UPD:离散化以后用数组就可以实…
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4542 首先若p=2,5则这题就是道傻逼题,前缀和搞一下没了.如果p为其他质数,那么可以这么处理: 我们先预处理出数组num[i]表示原串第i~n位表示的数模p的余数,那么第l~r位表示的数模p的余数为(num[l]-num[r+1])/10^(n-r),因为10^(n-r)与p互质,所以若num[l]=num[r+1],则第l~r位表示的数是p的倍数.于是莫队一下就好了. 代码: #…
挺有意思的,可以仔细体味一下的题:看白了就是莫队板子. Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个询问求 S 的一个子串中有多少子串是 P 的倍数(0 也是P 的倍数).例如 S为0077时,其子串 007有6个子串:0,0,7,00,07,007:显然0077的子串007有6个子串都是素数7的倍数. Input 第一行一个整数:P.第二行…
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; typedef long long LL; #define N 100010 struct Node { LL val; int id; }md[N]; struct data {…
PAT:A1024 Palindromic Number A number that will be the same when it is written forwards or backwards is known as a Palindromic Number. For example, 1234321 is a palindromic number. All single digit numbers are palindromic numbers.Non-palindromic numb…
HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组合数学.高精度 因为男生没有限制,首先把男生排成一列. 然后分情况讨论: 两个老师之间有男生: 首先把两个老师插入到\(n\)个男生中,方案数\(\binom{n+1}{2}\) . 然后把女生插入到老师与男生中,方案数\(\binom{n+3}{m}\). 两个老师之间无男生: 那么两个老师之间只…
本蒟蒻表示终于$AC$了$HNOI2016$的六道毒瘤题... 高兴! 附上各个题的题解: $DAY1$: $T1$: BZOJ4537: [Hnoi2016]最小公倍数 $T2$: BZOJ4538: [Hnoi2016]网络 $T3$: BZOJ4539: [Hnoi2016]树 $DAY2$: $T1$: BZOJ4540: [Hnoi2016]序列 $T2$: BZOJ4541: [Hnoi2016]矿区 $T3$: BZOJ4542: [Hnoi2016]大数 下一个目标:$SDOI2…
A. Laptops time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the more expensive a laptop is, the…
Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9394    Accepted Submission(s): 3065 Problem Description A Fibonacci sequence is calculated by adding the previous two members the…