bzoj

bzoj 3145 [Feyat cup 1.5]Str

不羁岁月 提交于 2019-11-29 17:22:51
权限题 这题暴力就是两个串分别枚举点 \(i,j\) ,假设这两个点不同,那么剩下的部分就是尽量越长越好,所以这部分答案就是第一个串 \(i-1\) 前缀和第二个串 \(j-1\) 前缀的 \(lcs\) +第一个串 \(i+1\) 后缀和第二个串 \(j+1\) 后缀的 \(lcp\) +1 考虑把两个串接起来,中间用个没用过的字符隔开,那么两个串前缀的 \(lcs\) 就可以先在前缀树上找到对应的两个点,然后就是两点 \(lca\) 的 \(length\) .后缀的 \(lcp\) 也类似.那么答案就是 \(\max (lcs(a_{i-1},a_{j-1})+lcp(b_{i+1},b_{j+1}))\) ,其中 \(a_i\) 为某前缀在前缀树上对应点, \(b_i\) 为后缀在后缀树上对应点 所以这个问题变成了询问所有点对在两棵树上lca深度和的最大值.可以dfs第一棵树,然后处理第一棵树上lca为 \(x\) 的点对,每次把儿子内点在第二棵树的信息合并过来,就能求解.首先,两个子树合并,为了保证复杂度,需要启发式合并,然后在合并时算贡献.现在就是要知道某个点和一个点集内点在第二棵树上的lca最大深度,容易发现一定和dfs序相邻的点lca最深.所以一个点维护的是子树内点在第二棵树上以dfs序为关键字的set,每次二分查找前驱后继即可 #include<bits/stdc

[BZOJ]3732: Network

我的未来我决定 提交于 2019-11-29 16:57:30
传送门 就是一道LCA的应用; 不过 重点 (个人观点,勿喷)在于 想到 这条{最长的边最小值}的路径在MST(最小生成树)上; 想到这一点之后,基本就会了。 还有第二个小问题 ,怎么lca求路径最大值。 ( 思 考 空 间 ) ANS: 蛮simple的 ,只要在跳lca的时候记录最大值就可以了。 代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,p; 4 struct pp 5 { 6 int to,nxt,val; 7 }e[600005]; 8 struct p1 9 { 10 int x,y,z; 11 }g[300005]; 12 bool cmp(p1 x,p1 y) {return x.z<y.z;} 13 int head[300005]; 14 int tot; 15 int v[300005][22]; 16 int dep[300005]; 17 void add(int x,int y,int z) 18 { 19 e[++tot].to=y; 20 e[tot].val=z; 21 e[tot].nxt=head[x]; 22 head[x]=tot; 23 } 24 int f[300005][22]; 25 void dfs(int x) 26 { 27 for(int i

BZOJ - 3032 七夕祭【前缀和】

a 夏天 提交于 2019-11-29 15:10:17
【题目描述】 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是TYVJ今年举办了一次线下七夕祭。Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩。 TYVJ七夕祭和11区的夏祭的形式很像。矩形的祭典会场由N排M列共计N×M个摊点组成。虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani预先联系了七夕祭的负责人zhq,希望能够通过恰当地布置会场,使得各行中cl感兴趣的摊点数一样多,并且各列中cl感兴趣的摊点数也一样多。 不过zhq告诉Vani,摊点已经随意布置完毕了,如果想满足cl的要求,唯一的调整方式就是交换两个相邻的摊点。两个摊点相邻,当且仅当他们处在同一行或者同一列的相邻位置上。由于zhq率领的TYVJ开发小组成功地扭曲了空间,每一行或每一列的第一个位置和最后一个位置也算作相邻。现在Vani想知道他的两个要求最多能满足多少个。在此前提下,至少需要交换多少次摊点。 【输入】 第一行包含三个整数N和M和T。T表示cl对多少个摊点感兴趣。 接下来T行,每行两个整数x, y,表示cl对处在第x行第y列的摊点感兴趣。 【输出】 首先输出一个字符串。如果能满足Vani的全部两个要求,输出both;如果通过调整只能使得各行中cl感兴趣的摊点数一样多,输出row

BZOJ 2154: Crash的数字表格

吃可爱长大的小学妹 提交于 2019-11-29 12:03:25
2154: Crash的数字表格 思路: 莫比乌斯反演+整除分块 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define pdd pair<double, double> #define mem(a, b) memset(a, b, sizeof(a)) #define debug(x) cerr << #x << " = " << x << "\n";

BZOJ 2820 YY的GCD

让人想犯罪 __ 提交于 2019-11-29 11:44:50
2820 YY的GCD 思路: 莫比乌斯反演+整除分块 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb emplace_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define pdd pair<double, double> #define mem(a, b) memset(a, b, sizeof(a)) #define debug(x) cerr << #x << " = " << x << "\n";

BZOJ 2301: [HAOI2011]Problem b

狂风中的少年 提交于 2019-11-29 10:16:07
2301: [HAOI2011]Problem b 思路: 莫比乌斯反演+整除分块 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb emplace_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define pdd pair<double, double> #define mem(a, b) memset(a, b, sizeof(a)) #define debug(x) cerr << #x << " = " << x

bzoj 3551: [ONTAK2010]Peaks加强版

心已入冬 提交于 2019-11-29 09:53:21
3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 3889 Solved: 1143 [ Submit ][ Status ][ Discuss ] Description 【题目描述】同3545 Input 第一行三个数N,M,Q。 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径。 接下来Q行,每行三个数v x k,表示一组询问。v=v xor lastans,x=x xor lastans,k=k xor lastans。如果lastans=-1则不变。 Output 同3545 Sample Input Sample Output HINT 【数据范围】同3545 这题是kruskal重构树,这题一定要在线,而3545可以离线,离线的话我们可以排序以后用线段树合并维护连通性。 构树以后,由于答案都在子树里面,而子树在dfs序里面是一个连续的区间,所以我们维护一个主席树。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=200000+10; 4 int const M=500000+10; 5 #define mid (l+r)/2 6

BZOJ 3924: [Zjoi2015]幻想乡战略游戏 动态点分治

喜你入骨 提交于 2019-11-29 04:11:10
细节挺多的,但是也确实加深了我对动态点分治的理解. Code: #include <cstdio> #include <vector> #include <algorithm> #define N 100004 #define inf 1000000000000000 #define ll long long #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout) using namespace std; int edges,n; int hd[N],to[N<<1],nex[N<<1],val[N<<1], hto[N<<1]; void add(int u,int v,int c) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c; } namespace tree { ll dis[N]; int fa[N],top[N],size[N],son[N],dep[N]; void dfs1(int u,int ff) { fa[u]=ff,size[u]=1; for(int i=hd[u];i;i=nex[i]) if(to[i]!=ff) { int v=to[i]; dep[v]=dep[u]+1,dis[v]=dis

BZOJ 1053 反素数 题解

空扰寡人 提交于 2019-11-29 03:21:20
题面 引理1: 1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)); 引理2:1~n中任何数的 不同 因子不会超过10个,因为他们的乘积大于2,000,000,000; 引理3: 1~n中任何数的质因子的指数总和不超过30; 引理4: x的质因子是连续的若干个最小的质数,并且指数单调递减; 对于指数的排列我们只要深搜就可以找到方案,对于不同情况判断是否更新答案; #include <bits/stdc++.h> using namespace std; long long n; long long ans=99999999999999; int a[15]={0,2,3,5,7,11,13,17,19,23,29,31}; inline long long KSM(long long a,long long b) { long long res=1; while(b){ if(b&1) res=res*a; a=a*a; b/=2; } return res; } long long cnt=-1; inline void dfs(int dep,int now,long long sum,long long num) { if(sum>n||sum<0){ return; } if(num>cnt){ ans=sum; cnt

[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

女生的网名这么多〃 提交于 2019-11-29 01:46:32
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间 \([L,R]\) (L和R为整数)中选取N个整数,总共有 \((R-L+1)^N\) 种方案。求最大公约数刚好为K的选取方案有多少个。由于方案数较大,你只需要输出其除以1000000007的余数即可。 \[N,K,L,H \leq 10^9,H-L \leq 10^5\] 分析 \(\because \gcd(ka,kb)=k\gcd(a,b)\) ,我们先把 \(L,R\) 除以 \(K\) ,然后问题就变成了求gcd=1的方案数 设 \(f(x)\) 表示区间[l,r]里选n个数,gcd为x的方案数 设 \(F(x)\) 表示区间[l,r]里选n个数,gcd被x整除的方案数 \(\because x|\gcd(i,j),\therefore x|i,x|j\) [l,r]里被x整除的数有 \((\lfloor \frac{r}{x} \rfloor-\lfloor \frac{l-1}{x} \rfloor)\) 个 因此 \(F(x)=(\lfloor \frac{r}{x} \rfloor-\lfloor \frac{l-1}{x} \rfloor)^n\) \(F,f\) 显然满足莫比乌斯反演的第二种形式, \(F(x)=\sum_{x|d} f(d)\) \(f(x)=