4488: [Jsoi2015]最大公约数 思路:容易发现以某个位置\(i\)为结尾所有后缀的\(gcd\)个数不超过\(log(a[i])\)。 (怎么发现?将数写成质因子幂次乘积的形式,然后\(gcd\)每次减小一个质因子,最多减少\(log\)次)然后就可以用\(map\)维护每个\(gcd\)的最左端端点。 代码: #pragma GCC optimize(
题目 样例数T<=1e3,需取模的p<=1e7 思路来源 https://blog.csdn.net/tianyizhicheng/article/details/81698600 题解 很巧妙,记原式结果为g,由于2的个数是无限的,所以 开一个函数f(d)来实现求g mod(d)功能, 那么要求g mod(d)就得求g mod(phi[d]),递归求f(phi[d]) 注意到递归到d==1
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。 给你一个长度为n的序列s。 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。 其中a<b
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 5433 Solved: 2623[Submit][Status][Discuss] Description 有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),用三个整数表示。 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。
动态点分治好题 首先我们考虑一个暴力做法: 每次修改之后选一个点作为根搜索整棵树,然后换根dp即可 考虑每次换根时,移向的点的消耗会减少子树代价之和*边权,而其余部分代价会增加剩余代价*边权 这样每次换根都是$O(1)$的,总时间复杂度$O(nm)$,可以通过...20分! 贴代码: #include <cstdio>
Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润 Input 第一行给出 N,M(1<=N<=1200,1<=M<=1200) 下面将有N块数据,每块数据第一行给出完成这个任务能赚到
题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$ 首先推一发式子: $\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$ 有一个结论:$d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)\equiv 1]$ 然后代入,得: $\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{p|i}\sum_{q|j}[gcd(p,q)\equiv 1]$ 然后优先枚举$p$,$q$,得到: $\sum_
小西有一条很长的彩带,彩带上挂着各式各样的彩珠。已知彩珠有N个,分为K种。简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置)。某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上。 小布生日快到了,于是小西打算剪一段彩带送给小布。为了让礼物彩带足够漂
Code: #include<bits/stdc++.h>#define setIO(s) freopen(s".in","r",stdin) #define maxn 1000004#define x(i) (a[i]) #define y(i) (f[i]+b[i]) #define ll long long using namespace std; ll dis[maxn],p[maxn],cost[maxn],a[maxn],b[
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆。 这座博物馆有着特别的样式。它包含由m条走廊连接的n间房间,并且满足可以从任何一间房间到任何一间别的房
Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望。已知在其他k个岛屿上有丰富能源,为了防止敌军获取能源,我军的任务是炸毁一些桥梁,使
后缀自动机基本应用 对询问串建起后缀自动机,然后建起parent树,做一次子树统计就知道了每个节点代表的字符串出现次数 接下来我们只考虑出现次数等于$k$的那些点,对于任意一个点$p$我们知道他代表的子串长度是连续的,长度范围在$[len_{fa}+1,len_{p}]$之间,那么我们做个差分,最后统计一次
题概: 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要 在这2^N个集合中取出若干集合(至少一个),使得它们的交集 的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 输入格式 一行两个整数N,K 输出格式 一行为答案。 样例 样例输
Code: #include<bits/stdc++.h> #define maxn 10003 #define ll long long #define p 10000000000llusing namespace std;ll base[maxn];int n,m,len=1; void multiply(int x){ ll pre=0,tmp; for(int i=1;i<=len;i++) { tmp=base[i
Description 题库链接 给 \(n\) 个人排位置。有 \(m\) 个约束关系,约束关系形同 \((u,v)\) 表示第 \(u\) 个人要与第 \(v\) 个人相邻。问共有多少种安排方法。 \(0<n\leq 500000,m\leq n\) Solution 康复训练 \(\times 2\)。 首先我们可以将约束关系变成边。讨论不合法的情况: 边相连
首先是动态dp了嘛... 然后考虑怎么做:首先列出dp方程,大概长这样: $f[i]=min(v[i],\sum f[to])$ 看着不太像动态dp呀... 考虑拿出重儿子的贡献,然后套模型,大概能构造出一个这样的东西: 设$g_{i}=\sum f_{to}[to!=son]$ $\begin{pmatrix} f_{i}\\0 \end{pmatrix}$ = $\begin{pmatrix} g_{
B. 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令:1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要
BZOJ 4238 电压 考虑一条边成为答案以后,删去Ta后剩下的图是一个或很多个二分图,即没有奇环 则一条边可以成为答案,当且仅当自己在所有奇环的交上且不在偶环上。 考虑建出dfs树,那么返祖边一定在环上。 把边下放到点上,考虑处理出返祖边覆盖的两个端点直接的路径,这些点都在这个环上,按照
Code: #include<bits/stdc++.h>#define maxn 10000004#define ll long long using namespace std;void setIO(string s){ string in=s+".in"; freopen(in.c_str(),"r",stdin); }int cnt; int phi[maxn],vis[maxn],prime[maxn]; ll qpow(ll a,ll
居然把后缀数组写成n^2的。。我真厉害。。 想了无数种方法,最后发现就是比后缀字典序排名,后缀数组即可 注意每个字符串的结尾处要加上一个\(\inf\), 因为相当于要把空位尽量后移使得非空位集中在前面 代码 #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm
三倍经验...(然而我并没有氪金所以只能刷一倍...) 考虑在什么情况下两点是合法的: 可以看到,对于红色的点而言,绿色的点是合法的,而黄色的点是不合法的 那么观察一下这几个点的切线把圆分成的这几个弧之间的关系,可以看到:如果两个弧相交但不包含,那么对应的两点合法(比如红色和绿色),剩余情况
Code: #include<bits/stdc++.h>#define maxn 100000 #define inf 1000000008 #define mid ((l+r)>>1)#define ll long long#define lson (t[x].ch[0]) #define rson (t[x].ch[1]) using namespace std;void setIO(string s){ string in=s+".in";
[BZOJ 3601] 一个人的数论 题意 给定 \(K\) 和 \(n\) 对 \(p_i,r_i\), 令 \(N=\prod p_i^{r_i}\), 求下式对 \(10^9+7\) 取模后的值: \[ \sum_{k=1,k\perp N}^{N-1} k^K \] 其中 \(p_i,r_i\le 10^9, K\le 100, n\le 1000\). 题解 看见有学弟做了于是也做一做... 推了推发现可能要用
线段树套平衡树 上次spaly头铁卡不过去。。leaf tree轻轻松松~ #include <bits/stdc++.h> #define INF 2147483647 #define full(a, b) memset(a, b, sizeof a) #define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) using namespace std; typedef long long ll;
传送门 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的。天哪,他居然真的住在“树”上。松鼠想邀请小熊维尼前来参观,并且还指定一份参观指南,他希望维尼能够按照他的指南顺序,先去a1,