传送门 解题思路 差点写树套树...可以发现如果几个数都能被\(m\)整除,那么这几个数拼起来也能被\(m\)整除.同理,如果一个数不能被\(m\)整除,那么它无论如何拆,都无法拆成若干个可以被\(m\)整除的数.这样的话只需要看那些被\(m\)整除的前缀个数,然后选与不选直接\(2^cnt\)即可. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #inc…
4421: [Cerc2015] Digit Division Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 348  Solved: 202[Submit][Status][Discuss] Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 10^9+7)   Input 给出N,M,其中1<=N<=300 000,1<=M<=1000 000. 接下来一行…
4421: [Cerc2015] Digit Division 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4421 Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 10^9+7) Input 给出N,M,其中1<=N<=300 000,1<=M<=1000 000. 接下来一行,一个数字串,长度为N. Output 如题 Sample In…
[BZOJ4421][Cerc2015] Digit Division Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 10^9+7) Input 给出N,M,其中1<=N<=300 000,1<=M<=1000 000. 接下来一行,一个数字串,长度为N. Output 如题 Sample Input 4 2 1246 Sample Output 4 题解:如果一个前缀a%m==0,另一个长一点的前缀b…
如果两个相邻的串可行,那么它们合并后一定可行,所以求出所有可行的串的个数$t$,则$ans=2^{t-1}$. 注意特判整个串不可行的情况,这个时候答案为0. #include<cstdio> int n,m,i,t,ans;char a[300010]; int main(){ for(scanf("%d%d%s",&n,&m,a);i<n;i++){ t=(t*10+a[i]-'0')%m; if(!t)if(!ans)ans=1;else ans…
题目描述 We are given a sequence of n decimal digits. The sequence needs to be partitioned into one or more contiguous subsequences such that each subsequence, when interpreted as a decimal number, is divisible by a given integer m. Find the number of di…
Digit Division 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/D Description We are given a sequence of n decimal digits. The sequence needs to be partitioned into one or more contiguous subsequences such that each subsequence, when interp…
Digit Division Time limit: 1 s Memory limit: 512 MiB We are given a sequence of n decimal digits. The sequence needs to be partitioned into one or more contiguous subsequences such that each subsequence, when interpreted as a decimal number, is divis…
题目链接:Central Europe Regional Contest 2015 Zagreb, November 13-15, 2015 D.Digit Division(排列组合+思维) 题解:如果这个数从划分的过程中第一.二道竖线前的能够整除m,那么第一道与第二道竖线之间的数也能够整除m. #include <bits/stdc++.h> using namespace std; typedef long long ll; char a[300005]; ll qpow(ll x,ll…
[Cerc2015]Kernel Knights Time Limit: 2 Sec Memory Limit: 512 MBSubmit: 5 Solved: 4[Submit][Status][Discuss]Description “Jousting”是一种让骑士在高速骑行中用木制长矛相互攻击对方的中世纪竞技游戏.现在,一共有2n个骑士进入一场“Jousting”锦标赛.骑士们被平均分配到2个house.竞赛开始时,所有骑士都会对另一个house的骑士之一发起挑战.一组解被定义为一个集合S…
BZOJ LOJ 洛谷 考虑如何预处理每个点能到的区间\([l,r]\). 对于\(i,i+1\)的一扇门,如果钥匙在\(i\)的右边,连边\(i\to i+1\),表示从\(i\)出发到不了\(i+1\):否则连边\(i+1\to i\).没有门的话就缩成一个点. 如果存在边\(i\to j\),那么\(j\)的区间包含\(i\),而\(i\)肯定不包含\(j\).从无入度的点暴力扩展,对于它能到的点用它更新一下然后再暴力扩展,复杂度是\(O(n)\)的. 还有一种做法是这个,感觉也有些妙,复…
BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(60\)分啊但是第\(5.6\)个点WA了smg) 其实\(O((nm)^3)\)就是 [JSOI2009]有趣的游戏...只需建出AC自动机一遍高斯消元即可,比上面那个不知道好写到哪里去.. \(40\)分的做法问题在于状态(变量)太多.考虑把类似的状态合并成一个. 假设现在一共有两个串\(TTH\…
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^{12}\). \(Solution\) gcd有结合律,而且gcd每次改变至少会变小两倍,而且只会减小. 所以对于每个右端点,可以暴力维护每种gcd出现的最靠前的位置(只有\(log\)种gcd). 详细一点就是这样的: 枚举右端点\(i\). 栈里现在维护的是右端点为\(i-1\)时,每种\(\…
4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 177  Solved: 57[Submit][Status][Discuss] Description 给你一个n*n矩阵的第一行和第一列,其余的数通过如下公式推出:  F[i,j]=a*f[i,j-1]+b*f[i-1,j]+c  求f[n][n]%(10^6+3)  Input 第一行三个数n,a,b,c  第二行n个数,第i个表…
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 可以先把给出的东西排序成这样: -1 -1 -1 -1 -1  1 -1  1 -1 -1  1  1 1 -1 -1 1 -1  1 1  1 -1 1  1  1 就是后面看成低位.前面看成高位,1看成1.-1看成0的二进制的顺序. 发现把第1行和第2行相加再除以2,得到的就是与 x3 无关的…
传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几次,然后统计答案的时候从\(1\)循环到\(k\),每次转化为前缀和相减即可. 代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN = 10…
3293 双倍经验 1045 先考虑能否断环为链.显然是可以的,因为金币不可能在整个环上平移.所以我们枚举断点\(k\),表示\(k\)和\(k+1\)之间不交换金币. 令\(d_i=a_i-aver\),表示\(i\)需要给\(i-1\)的金币数量,\(d_i\)可正可负(负的就表示\(i-1\)给\(i\) \(d_i\)个金币).显然没必要再表示\(i-1\)给\(i\)的金币数量啊. 这样再对\(d_i\)求个前缀和\(s_i\),\(|s_i|\)就表示\(i\)位置需转手多少金币.注…
题目链接 \(Description\) 求\[\max\{\sum_{i=1}^{k-1}(C_i*|a_{x,i}-a_{y,i}|)-C_k*|a_{x,k}-a_{y,k}|\}\] \(Solution\) 首先可以直接将\(C_k\)乘到\(a_{i,k}\)里.然后我们要求\(\max\{\sum_{i=1}^{k-1}|a_{x,i}-a_{y,i}|-|a_{x,k}-a_{y,k}|\}\) 因为只需要求某两个数的最大值,所以我们把绝对值改掉,求:\[\max\{\sum_{…
题目链接 \(Description\) 有\(n\)个数,用其中的某些数构成集合,求构造出\(m\)个互不相同且非空的集合(\(m\)个集合无序),并满足每个数总共出现的次数为偶数的方案数. \(Solution\) 为简化问题,将无序转为有序,只需在最后除以\(m!\)即可. 设\(f[i]\)表示构造前\(i\)个集合并满足条件的方案数. 每个数出现次数为偶数,所以如果前\(i-1\)个集合确定,第\(i\)个集合也可以确定.这样对于\(i\)有\(A_{2^n-1}^{i-1}\)种方案…
题目链接 从哪个点出发最短路径都是一样的(最后都要回来). 脑补一下,最短路应该是按照DFS的顺序,依次访问.回溯遍历所有点,然后再回到起点. 即按DFS序排序后,Ans=dis(p1,p2)+dis(p2,p3)+...+dis(pk,p1).每次修改一个点,用set维护即可. int dis[]一分没有啊.. 这好像算虚树的思想.. //15412KB 5240MS(Rank8...) #include <set> #include <cstdio> #include <…
[算法]欧几里德算法 [题解]紫书原题 #include<cstdio> #include<algorithm> using namespace std; ; int T,t,n,a[maxn]; int gcd(int a,int b) {?a:gcd(b,a%b);} int main() { scanf("%d",&T); ;i<=T;i++) { scanf(],&t); ;i<n;i++)scanf("%d&quo…
分治最小割的题目,要求n2. 之前用的n3的方法自然不能用了. 于是用hash,设hash[i][j]表示在最小割为i的时候,j是否与S联通. 看懂这个需要理解一下最小割树的构造. 这种题建议用EK写,因为EK在流量保证很小的时候实际是非常快的. 另外,这题卡常. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #in…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1510 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,INF=1e9+; int n,m,h[N],r,p0; int rdn() { ;;char ch=getchar(); ;ch=getchar();}…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 给每个值开一个vector.每个询问挂在其第一个值上:然后枚举给定序列,遇到一个值就访问那个值的vector,把里面的询问序列都向前推进一位,挂在新的值的vector里. 注意不要一边消一边挂,因为可能消的和挂的是同一个值:只要临时存一下就行了. #include<iostream> #include<cstdio> #include<cstring> #i…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1086 于是去看了题解. 要回溯的时候再把自己加进栈里判断.这样才能保证剩下的可以通过自己连到上面. 过程中最大是 (b-1)+(b-1)+1 ,根的时候最大是(b-1)+(b-1)+1+(b-1). 只有b>n的时候无解? #include<iostream> #include<cstdio> #include<cstring> #include<al…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4300 记录一下 mx[j] 表示以第 j 位上是1的元素结尾的子序列长度最大值,转移即可. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,xm=; int n,a[xn],mx[xm],bin[x…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球: 询问一段区间,等于知道一段区间的奇偶性: 设 s[i] 表示从 0 到 i 的小球总数的奇偶性,已知 s[0] = 0: 那么询问区间 [l,r] ,相当于知道了 s[l-1] ^ s[r],那么知道其中一个就可以知道另一个了,而目标是知道所有 s[i] , 1 <= i <= n 所以把询问区间 [l,r] 看做是 l…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 有向图用最小的路径(==总点数最少)覆盖所有边. 完了完了我居然连1999年的题都做不出来了. TJ:https://blog.csdn.net/u014609452/article/details/53705451 仔细一想,原来就是欧拉回路的连通块自然不用说,原来不是欧拉回路的连通块,我们在走路径的时候不时从一个点跳到另一个点,其实可以看作是给这两个点间连了一条边! 所以手动连一…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
Given two numbers A and B. The task is to compute the last digit of the resulting F, where F= B! / A! . Input:The first line of input contains an integer T denoting the number of test cases. Then T test cases follow. Each test case contains two numbe…