- 博客(432)
- 收藏
- 关注
原创 2020 CQ省选退役记
Day0考试就在我们学校考…下午还被拉去军体拳比赛舞旗。(实际上前两天都有被拉去训练)晚上教练说就不回家了,在学校自习。然后有位巨佬溜了…其他人上到10点也溜了。只有我一个人是住读,10:50溜回寝室睡觉。大概11:40睡着吧Day1考试就咕掉了每天的英语/语文早读。然后7:20去了机房,发现考场门大开,没人。挺离谱的。在没作考场的机房看了看模板,过了一会被赶下楼说7:50才能上楼。。。。进考场。看题。10分钟发现好像是个傻逼题,线段树上二分。O(nlogn)O(n\log n)O(n
2020-06-20 15:04:17
912
2
原创 0607模拟赛 随机除法(div) 炮塔(tower) 最大子段和
A.随机除法(div)题面题解因为n很大,所以手写高精。然后代码中前缀和数组的定义与上面的题解有一点不一样(而且上面的题解好像把jjj写成iii了)。含义如下sum[e][i]=∑e′(∏j≤i[ej′=ej]∏[ej′≤ej]dp[e′])sum[e][i]=\sum_{e'}\left(\prod_{j\le i}[e'_j=e_j]\prod[e'_j\le e_j]dp[e']\right)sum[e][i]=e′∑(j≤i∏[ej′=ej]∏[ej′≤ej]dp[e′
2020-06-08 22:44:30
353
原创 CF600E Lomsat gelral(虚树做法)
题目n≤105n\le 10^5n≤105。题解有dsu on tree\texttt{dsu on tree}dsu on tree的解法。我写的是虚树的做法。对于每种颜色建虚树,然后在虚树上求一次子树size,然后每个虚树上的点对原树上对应点做初步贡献。最后再dfs\texttt{dfs}dfs一遍求答案。存答案我用的是结构体,存最大值和编号之和。可以简单合并。考虑证明上面的做法对于一种颜色,在初步贡献和最后的一遍dfs\texttt{dfs}df
2020-06-06 11:40:03
345
原创 0603模拟赛 解码 排列 安排
A 解码题面题解有xc≡m (mod n)x^c\equiv m\ (mod\ n)xc≡m (mod n),且ccc与(p−1)⋅(q−1)(p-1)\cdot (q-1)(p−1)⋅(q−1)互质。发现φ(n)=(p−1)⋅(q−1)\varphi(n)=(p-1)\cdot(q-1)φ(n)=(p−1)⋅(q−1),又xφ(n)≡1 (mod n)x^{\varphi(n)}\equiv1\ (mod\ n)xφ(n)≡1&nbs
2020-06-03 15:22:21
346
原创 0601题目 (矩阵树定理、2-sat、prufer序列)
A. Stranger Trees题面给定一棵有nnn个节点的无根树求对于这nnn个点,以及每个k=0,1,2...n−1k=0,1,2...n-1k=0,1,2...n−1,有多少棵由这n个点构成的带标号无根树,与给定的树恰好有kkk条边重复。答案模109+710^9+7109+7。n≤100n\le100n≤100题解设恰好有kkk条边重复的方案为g(k)g(k)g(k),至少有kkk条边的方案为f(k)f(k)f(k)。答案要求g(k)g(k)g(k),而f(k)=∑k≤i(ki)g(
2020-06-01 19:24:07
373
原创 LOJ 6053 时间复杂度 min25筛
求 fff 前 nnn 项的和对 201906012019060120190601 取模的值。1≤n≤10111\le n\le 10^{11}1≤n≤1011。考虑 min_25 筛中的 g0(n,j)g_0(n,j)g0(n,j)(000 次方,即满足条件的数的个数)和 g0(n,j−1)g_0(n,j-1)g0(n,j−1)。g0(n,j)=∑i=1n[i∈prime ∣∣ minp(i)>pj]g_0(n,j)=\sum\limits^n_{i=1}[i\in p
2020-05-30 10:55:20
293
原创 BZOJ 4036 [HAOI 2015] 按位或
题面刚开始你有一个数字000,每一秒钟你会随机选择一个[0,2n−1][0,2^n-1][0,2n−1]的数字,与你手上的数字进行或操作。选择数字iii的概率是p[i]p[i]p[i]。保证0≤p[i]≤10\le p[i]\le 10≤p[i]≤1,∑p[i]=1\sum p[i]=1∑p[i]=1问期望多少秒后,你手上的数字变成2n−12^n-12n−1。题解论文题。代码很短。20行。#include <bits/stdc++.h>using namespace std;con
2020-05-27 22:43:16
4616
原创 0522模拟赛 A. 求和 B.农民(farmer) C.仙人掌
A. 求和求模s直接顺着递推。求模2的次幂用倒推。#include <bits/stdc++.h>using namespace std;const int MAXN = 1000105;int n, m, K;inline int qpow(int a, int b, int c) { int re = 1; a %= c; for(; b; b>>=1, a=1ll*a*a%c)if(b&1) re=1ll*re*a%c; return re;
2020-05-26 22:33:17
316
原创 0525模拟赛
A可以发现线段树不能维护,因为查询时无法合并logloglog个区间的历史最小值。于是就可以用kd树。直接维护当前的值和历史最小值就行了。合并很简单。详见代码。#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; while(!isdigit(ch=getchar())); for(x=ch-'0';isdigit(ch=getchar());x=x*10+ch-'0.
2020-05-26 22:20:24
211
原创 0206模拟赛题解 + CODE
T1考场上推推,过了。不过写的不是最优的。其实gcds,lcms,all,phigcds,lcms,all,phigcds,lcms,all,phi都不用预处理。不过我自己想的没那么清楚,能做出来就不错了。#include<bits/stdc++.h>using namespace std;typedef long long LL;inline void read(int ...
2020-05-21 21:54:59
336
原创 20200207模拟赛 题解
T1感觉有点神,题意就是给一棵树,求有多少不同的点分方案。n≤5000n\le 5000n≤5000题解就是考虑用一条边合并两棵树时,他们的点分树能结合成什么样。那么就可以考虑DP了:代码挺短。#include<bits/stdc++.h>using namespace std;typedef long long LL;template<class T>...
2020-05-21 21:54:40
270
原创 0203zr考试题解+代码
B题CODE#pragma GCC optimize (3)#include <bits/stdc++.h>using namespace std;typedef long long LL; inline LL mul(LL a, LL b, LL p) { LL re = (a*b)-(LL)((long double)a/p*b+0.5)*p; return...
2020-05-21 21:54:32
214
原创 0205听课笔记2
Stern-Brocot Tree (SB树)例题:BZOJ2852:给两个有理数 a,ba,ba,b, 求最小的正整数 kkk, 使得 (ak,bk)(ak, bk)(ak,bk) 里有整数。aaa, bbb 整数部分不超过 2312^{31}231, 小数位数不超过 300300300 位。莫比乌斯反演数论函数:定义域在正整数域上的函数。积性函数:(a,b)=1(a...
2020-05-21 21:54:26
278
原创 0205听课笔记1
简 单 数 论。gcdlcmgcd的应用:类欧几里得问题:∑x=1n⌊ax+bc⌋\sum_{x=1}^n\lfloor\frac{ax+b}c\rfloor∑x=1n⌊cax+b⌋,a,b,c,n≤109a,b,c,n\le 10^9a,b,c,n≤109可假设a≤c,b≤ca\le c,b\le ca≤c,b≤c,因为大于等于时减去一个ccc,aaa的贡献就在答案...
2020-05-21 21:54:19
164
原创 0202听课笔记
点分治重心GGG,∣G∣≤2|G|\le2∣G∣≤2。重心子树size≤n/2size\le n/2size≤n/2求一次O(M(n))O(M(n))O(M(n)),时间复杂度O(M(n)logn)O(M(n)\log n)O(M(n)logn)边分治选一条边分成两块。但并不是所有图都能均匀分。(如菊花图)所以不能直接边分治。要增加虚点,使得每个点的度数不超过333。左上的菊...
2020-05-21 21:54:05
229
原创 0204听课笔记
字符串Hash用双模数,别64位溢出。会被卡。KMP略例题:[CEOI2011]Matching1.KMP+BIT维护排名O(nlogn)O(n\log n)O(nlogn)2.转化数组后线性KMPO(n)O(n)O(n)传送门例题:动物园:给定一个串SSS,对每个前缀求出它有几个border满足长度不超过这个前缀的一半。N≤106N\le 10^6N≤106...
2020-05-21 15:16:41
294
原创 2020 520模拟赛 A.FWT优化 B.powerful_number求积性函数前缀和 C.毒瘤容斥状压(论文题:画家小P)
A考试一看,60分白送 写了走人。发现可以FWTFWTFWT。我们先转化一下问题,把求最大的异或和为000的集合转化为求最小的异或和为CCC的集合。其中C=⊕i=1naiC=\oplus_{i=1}^na_iC=⊕i=1nai。那么我们把每个aia_iai位置加111,然后从小到大枚举答案iii,卷积iii次后如果CCC位置有值,那么答案就是iii。然而由于线性基相关知识我们可以知道,如果能异或到CCC,最多只需要logA\log AlogA个数。而CCC本来就是所有aia_iai的异或
2020-05-20 22:51:36
449
原创 0519模拟赛
考试时没做这题。。。结果是最水的。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 100005;int n, k;struct node { LL x, y; node(LL x=0, LL y=0):x(x), y(y){} inline node operator +(const node &o)const { return node(x+o.x, .
2020-05-19 22:03:42
188
原创 模拟赛题解:A 矩阵求和(推式子+树状数组)
n,m,q≤105n,m,q\le 10^5n,m,q≤105于是我们就可以做出这道题了。(注意单独的∑c\sum c∑c或者∑d\sum d∑d都可以直接化成一个组合数)#include <cstdio>#include <cstring>#include <algorithm>#include <cctype>using namespace std;inline void read(int &x) { char ch; in.
2020-05-19 21:59:15
291
原创 西行寺无余涅槃 (FWT + 优化)
写得非常好 连我这样菜的都看懂了CODE#include <bits/stdc++.h>using namespace std;char cb[1<<20],*cs,*ct;#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<20,stdin),cs==ct)?0:*cs++)inline void read(int &a){ char c;while(!isdigit(c=getc()
2020-05-18 20:30:18
457
原创 CF1172E Nauuo and ODT(LCT维护子树信息)
考虑枚举颜色,计算不包含此颜色的路径。那么把这种颜色看做白点,其他的看做黑点。那么每个黑色连通块的size的平方和就是要求的不包含此颜色的路径。要动态维护这个值,就用LCT。但是改一个点的颜色会涉及很多条边,那么我们把所有黑点向父亲连边,那么一个连通块一定是根节点为白色,根节点的儿子是若干黑连通块(这里可以设根节点的父亲为n+1,白色)。那么这样改变颜色只会在LCT上做1次修改。要维护答案,需要维护3个值。szszsz,表示整个子连通块的sizesizesize大小,即实儿子的sizesizesiz.
2020-05-16 17:09:13
387
原创 0515 模拟赛 A.构造题(找规律 B.毒瘤状压算容斥系数 C.提答乱搞
A题目:标算:另有找规律解法:先把kkk转化成大于等于的子集数,就是用2n−1−k2^n-1-k2n−1−k替代kkk。然后如果k=−1k=-1k=−1肯定无解。否则我们写出一个n∗nn*nn∗n的矩阵,形如倒置的杨辉三角。如下图:然后直接对于每一行,从左往右扫,如果kkk减去当前格子的数后非负,就减去,然后把答案的邻接矩阵对应位置设为111,否则直接跳到下一行。然后就完了。时间复杂度O(n2)O(n^2)O(n2)。所以给nnn开到100010001000,然后kkk用高精读入也是可以做
2020-05-16 12:00:25
480
原创 0513 模拟赛 1.FMT 2.分治NTT 3.毒瘤树剖套线段树+可删除堆
T1可以发现每个果子的贡献系数是一个组合数,然后由于是异或,只需要求此组合数的奇偶性。组合数长这样(d+tt)\binom{d+t}{t}(td+t),ddd表示该果子深度(从0开始),然后#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; int flg=1; while(!isdigit(ch=getchar()))if(ch=='-')flg=-flg; fo
2020-05-13 16:28:45
385
原创 0504模拟赛
A#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; while(!isdigit(ch=getchar())); for(x=ch-'0';isdigit(ch=getchar());x=x*10+ch-'0');}const int mod = 9...
2020-05-05 22:18:41
230
原创 0501模拟赛
A考试写了暴力ntt走人。#include <bits/stdc++.h>using namespace std;const int mod = 998244353;int p[105], t[50000005];int n, k, x, s, ans;inline int qpow(int a, int b) { int re = 1; for(; b; b&...
2020-05-05 22:12:21
233
原创 0502 zr模拟赛
A乍一看 就是一个需要插入删除的线性基,里面 2^未确认的位数 就是连通块答案。然后不会删除,所以写个线段树分治。正解是离线,对于线性基每个数维护有效的最后时间,插入的时候更新一下让每一位的有效时间最大。然后查询的时候就看有多少位的最后有效时间>=i当前时间。这样就是一个log的。女少#include<bits/stdc++.h>using namespace st...
2020-05-03 14:37:40
312
原创 0428 模拟赛 Arithmetic Epidemic Sort
Arithmetic#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; int flg = 1; while(!isdigit(ch=getchar()))if(ch=='-')flg=-flg; for(x=ch-'0';isdigit(ch=getc...
2020-04-30 10:58:31
205
原创 LOJ #2001. 「SDOI2017」树点涂色 (LCT + 线段树)
题面LOJ 2001题解转自luyixian的博客操作一我们发现这一个操作就是把树中某个节点到根节点的路径上的所有节点变成一样的颜色,又因为这棵树上有一个性质,同样颜色的点连接起来一定会是一条链,就可以想到LCT的access函数。所以我们将同种颜色的点看成LCT中同一棵splay上的点。操作二因为LCT已经维护了颜色了,所以我们不能再用LCT来维护路径之间的权值了。于是就可以想到...
2020-04-29 16:32:52
213
原创 0429模拟赛
A已知一个 n*m 的矩阵,矩阵的每个元素都是非负整数.已知第 i 行的最大值为 ri ,第 j 列的最大值为 cj .求矩阵数目。对1e9 + 7 取模。n,m <= 1000题解枚举几行几列不满足条件(即不存在最大值),简单容斥。注意前面填了的位置后面不能再填,就把n,m减去对应的行数列数。时间复杂度O(nm)O(nm)O(nm)权值分开算来避免取min想不到(是套路吗? ...
2020-04-29 15:38:22
365
原创 0302模拟赛
T1直接搜索出来字符串的最小表示法,然后排列计算一下。#include <bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;typedef long long LL;int n, m, k, mx, a[12], f[12]; LL seq[60];void Count() { int cnt = 0;...
2020-03-02 22:24:35
173
原创 0301模拟赛
T1#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; while(!isdigit(ch=getchar())); for(x=ch-'0'; isdigit(ch=getchar()); x=x*10+ch-'0');}const int MAXN ...
2020-03-01 23:50:25
198
原创 0227模拟赛
T1#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 200005;const int mod = 998244353;int cnt, sqr;LL n, pr[MAXN/8], cnt_pr, a[MAXN], s0[MAXN];inline int i...
2020-02-29 00:02:11
155
原创 0228模拟赛
T1#include<bits/stdc++.h>using namespace std;const int MAXN = 4505;const int mod = 998244853;int n, a[MAXN], nxt[MAXN], sz[MAXN], f[MAXN][MAXN], sum[MAXN];int main() { freopen("administ...
2020-02-28 18:06:44
225
原创 0226 模拟赛
T1#include <bits/stdc++.h>using namespace std;inline void read(int &x) { char ch; while(!isdigit(ch=getchar())); for(x=ch-'0'; isdigit(ch=getchar()); x=x*10+ch-'0');}const int MAXN ...
2020-02-27 00:15:14
197
原创 0225模拟赛
T1直接按照定义推式子,就可以用矩阵加速优化。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int mod = 998244353;int len;struct mat { int a[3][3]; mat(){memset(a,0,sizeof a);} inline ...
2020-02-25 22:05:32
197
原创 0224模拟赛
T1神题看看题解:std12K:#include <bits/stdc++.h>inline int read() { int ret, cc, sign = 1; while (!isdigit(cc = getchar())) sign = cc == '-' ? -1 : sign; ret = cc - 48; while (isdigi...
2020-02-24 20:13:16
231
原创 0223模拟赛
T1首先一个显然的性质是无环的竞赛图一定是一个全序集.其次是如果钦定的点不是全序集那么必定无解.无解判掉之后所有的点就被分成了两个全序集合(数据保证剩下的点无环). 我们枚举剩下的点看它能不能合法插入被钦定的全序集中. 对于能合法插入的点, 一定会有一个唯一的插入位置. 显然我们必须让这些点的插入位置递增(因为要满足两个全序关系). 于是我们按照全序顺序把所有能插入的点的插入位置求出来, 然...
2020-02-24 16:01:04
180
原创 0222模拟赛
T1异或问题,这里用了线性基。删边就是倒过来加边。发现异或重复的边就是相当于没有异或,那么答案其实就是随便找一棵生成树,然后用一条1到某个点得链和若干个环的异或值。那么我们加边的同时维护一下环,如果成环了就塞进线性基,然后一个hash表存一下1开头的链在线性基内把有数的位都异或之后有多少种,可以使用hash来做。然后线性基改变时就暴力重构hash表。因为线性基最多修改log\loglog次,...
2020-02-23 15:48:06
281
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人