09 2023 档案

摘要:P1037 [NOIP2002 普及组] 产生数 解法1: 利用floyd寻找每位数字可变化的点 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; string s; int d[20][20]; 阅读全文
posted @ 2023-09-30 18:57 不o凡 阅读(151) 评论(0) 推荐(0)
摘要:原文链接:https://blog.csdn.net/qq_43227036/article/details/100336234 OK,前面已经讲了很多判断素数的方法,在判断一个数是否为素数时我们可以采用试除法,但如要求1-n的范围那么时间复杂度很高,所以有了线性的筛法求素数。 但如果为了判断一个大 阅读全文
posted @ 2023-09-30 14:40 不o凡 阅读(32) 评论(0) 推荐(0)
摘要:推荐视频:518 筛法求莫比乌斯函数 前提知识:莫比乌斯函数 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const int N = 1e8 + 10; int p[N], cnt; int mu[ 阅读全文
posted @ 2023-09-29 20:32 不o凡 阅读(19) 评论(0) 推荐(0)
摘要:推荐视频:517 筛法求约数和 这个比较简单,若想来点挑战,请点开这个:P2424 约数和 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const int N = 1e8 + 10; int p[N 阅读全文
posted @ 2023-09-29 20:24 不o凡 阅读(37) 评论(0) 推荐(0)
摘要:推荐视频:516 筛法求约数个数 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const int N = 1e8 + 10; int p[N], cnt; int d[N];//d[i]记录i的约数 阅读全文
posted @ 2023-09-29 19:54 不o凡 阅读(22) 评论(0) 推荐(1)
摘要:筛法+试除 推荐视频:筛法求欧拉函数 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const int N = 1e8 + 10; int p[N], cnt,phi[N]; bool vis[N]; 阅读全文
posted @ 2023-09-29 16:37 不o凡 阅读(12) 评论(0) 推荐(0)
摘要:点击查看代码 #pragma GCC optimize(2) 阅读全文
posted @ 2023-09-29 15:56 不o凡 阅读(21) 评论(0) 推荐(0)
摘要:点击查看代码 void write(int x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); return; } 阅读全文
posted @ 2023-09-29 15:55 不o凡 阅读(17) 评论(0) 推荐(0)
摘要:整数 点击查看代码 ``` int read() { int x=0,f=1; char ch=getchar(); while(ch'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch 字符串 点击查看代码 inline stri 阅读全文
posted @ 2023-09-29 15:53 不o凡 阅读(17) 评论(0) 推荐(0)
摘要:【模板】线性筛素数 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const int N = 1e8 + 10; int p[N],cnt,vis[N]; int main() { ios::sync 阅读全文
posted @ 2023-09-29 15:51 不o凡 阅读(46) 评论(0) 推荐(0)
摘要:因为n是两个质数的乘积,所以直接暴力枚举,只要能被整除,直接输出 因为是要求大的那个,所以从小到大枚举,输出商即可 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long int main() { LL n; 阅读全文
posted @ 2023-09-29 15:10 不o凡 阅读(46) 评论(0) 推荐(0)
摘要:G. wxhtzdy ORO Tree 前提知识:lca求最近公共祖先(倍增) 因为或运算越多值就越大,好像跟上一个相反,所以满足单调不降 要点1:利用数组来对每个点到其祖先节点的或和进行计算(倍增) 要点2:分别对左右两边进行分析到lca点,这样确保无误 要点3:因为满足单调不降,所以遇到大于的节 阅读全文
posted @ 2023-09-28 20:51 不o凡 阅读(58) 评论(0) 推荐(0)
摘要:F. Vasilije Loves Number Theory 前提知识:d(n)表示数字n的正约数个数,gcd(a,b)表示a,b两者的最大公约数 要点:问是否存在a,使得d(a * n)=n,gcd(n,a)=1,意思是n与a互质, 则可得,d(a * n)=d(a)*d(n)=n 则问题转化成 阅读全文
posted @ 2023-09-28 15:32 不o凡 阅读(40) 评论(0) 推荐(0)
摘要:E. Iva & Pav 把每一项的数拆分成32位二进制,然后求前i项第j位二进制为1的前缀和,如果区间范围内的1等于区间范围,则是可行的,乘上对应位置的大小,每一位求和判断与k的大小 二分+前缀和 点击查看代码 #include<bits/stdc++.h> using namespace std 阅读全文
posted @ 2023-09-28 11:03 不o凡 阅读(30) 评论(0) 推荐(0)
摘要:根据数据可知,字符串s被分成互不相交的子集,然后在每个子集内根据x的位置经行左右翻转,可知翻转为偶数时恢复原样,所以可以根据差分数组进行求解 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long const 阅读全文
posted @ 2023-09-28 10:59 不o凡 阅读(56) 评论(0) 推荐(0)
摘要:并查集模板题 只要按时间从小到达排序,然后加入并查集中即可,维护最大值。 如果并查集的数量等于n,则直接退出即可。 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; struct node { in 阅读全文
posted @ 2023-09-26 18:33 不o凡 阅读(12) 评论(0) 推荐(0)
摘要:贪心枚举,高度高的排在前面,相同高度序号小的排在前面 分别遍历左右端点,如果符合条件直接退出,注意俩端点重叠不算 在分别用L,R数组记录下标,方便输出 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e3 + 10 阅读全文
posted @ 2023-09-26 16:49 不o凡 阅读(124) 评论(0) 推荐(0)
摘要:P1100 高低位交换 简单位运算 点击查看代码 #include<bits/stdc++.h> using namespace std; int main() { unsigned long long n; cin >> n; cout << (((n & 0x0000ffff) << 16) | 阅读全文
posted @ 2023-09-26 16:01 不o凡 阅读(23) 评论(0) 推荐(0)
摘要:P1060 [NOIP2006 普及组] 开心的金明 简单的01背包问题 点击查看代码 #include<bits/stdc++.h> using namespace std; int f[30005]; int main() { int n, m; cin >> n >> m; for (int 阅读全文
posted @ 2023-09-26 15:44 不o凡 阅读(23) 评论(0) 推荐(0)
摘要:P4315 月下“毛景树” 月下“毛景坑”,调试了几个小时,终于过了 线段树,真的牛(永远的坑) 坑很多,都是些注意点,希望同样踩坑的朋友能在这里找到答案 注意点 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; 阅读全文
posted @ 2023-09-26 09:31 不o凡 阅读(36) 评论(0) 推荐(0)
摘要:P6098 [USACO19FEB] Cow Land G 可恶,上一个是线段树调试失败,利用树状数组做的,这一次看到单点修改区间查询,果断选着树状数组,结果wa了。 果然我还是太菜了 此题几乎是模板题,只要修改下线段树的向上传递即可,因为是单点修改,所以可以不用懒标记 注意这里求的是异或 点击查看 阅读全文
posted @ 2023-09-25 20:15 不o凡 阅读(16) 评论(0) 推荐(0)
摘要:P4427 [BJOI2018] 求和 树链剖分+树上前缀和 说来有趣,中午刚学完树上前缀和,立马就在这用上了 注意这里是点的前缀和,算出每个点的前缀和后,会发现有不少重复的,减去重复的点权和,就可以了。 利用mi[j],数组记录每个深度的第j次方,s[v][j]记录根节点到v点j次方的前缀和。 代 阅读全文
posted @ 2023-09-25 18:36 不o凡 阅读(71) 评论(0) 推荐(0)
摘要:P3128 [USACO15DEC] Max Flow P 有好几种解决方法,这里讲第一种树状数组 主要是线段树没调好 区间修改,单点查询,很明显我们可以用树状数组,简单又方便 树状数组 #include<bits/stdc++.h> using namespace std; const int N 阅读全文
posted @ 2023-09-25 16:13 不o凡 阅读(43) 评论(0) 推荐(0)
摘要:P3038 [USACO11DEC] Grass Planting G 树链剖分解决的是点权问题,那么遇到边权问题该怎么办? 其实只要把边权问题改为点权问题就行了,这不是废话 首先我们考虑一条边对应两个点,因为父节点可能对应多个儿子,但儿子节点只有一位父亲(如果是颗树的话),所以我们考虑让儿子节点对 阅读全文
posted @ 2023-09-25 10:30 不o凡 阅读(43) 评论(0) 推荐(0)
摘要:P1967 [NOIP2013 提高组] 货车运输 因为可能成环,这样可能导致到达点的最小权值不一,所以用最小生成树的方法重新建图 然后我是利用倍增的思想建立从i点开始,到上面点的距离ff和最小权值ww 因为最小权值不好直接建立,所以不如最后统一建立 最后就是寻找最近公共祖先的模板了 一组hack: 阅读全文
posted @ 2023-09-24 21:12 不o凡 阅读(16) 评论(0) 推荐(0)
摘要:P3379 【模板】最近公共祖先(LCA) 利用并查集 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 5e5 + 10; vector<int> g[N]; vector<pair<int,int>> query[ 阅读全文
posted @ 2023-09-24 19:28 不o凡 阅读(19) 评论(0) 推荐(0)
摘要:P3379 【模板】最近公共祖先(LCA) 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 5e5 + 10; vector<int> g[N]; int dep[N], fa[N][22]; void dfs(in 阅读全文
posted @ 2023-09-24 18:51 不o凡 阅读(10) 评论(0) 推荐(0)
摘要:P4824 [USACO15FEB] Censoring S KMP+栈 同样的套路,先找B的最长前后缀,然后与A匹配 不同的是要删除A中的B,特殊的是删除之后可能会产生新的B 那我们可以利用栈的思想,利用f数组,记录A每一位置上B的匹配程度,这样删除时,直接回到上一个匹配程度,以防漏掉。 利用栈记 阅读全文
posted @ 2023-09-24 18:25 不o凡 阅读(31) 评论(0) 推荐(0)
摘要:Compress Words 本人蒟蒻,请看更详细的题解 CF1200E Compress Words 题解 重点是利用KMP计算最长前后缀,注意几个点:长度、越界。 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 阅读全文
posted @ 2023-09-24 17:06 不o凡 阅读(15) 评论(0) 推荐(0)
摘要:P3375 【模板】KMP 字符串匹配 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; string s1, s2; int ne[N]; void get_ne() { ne[1] = 0; i 阅读全文
posted @ 2023-09-24 15:39 不o凡 阅读(14) 评论(0) 推荐(0)
摘要:E - Complete Binary Tree 完全二叉树 三个值N,X,K,分别表示点的个数,点的编号,求到X点的距离为K点的个数。 首先,我们对以X为根的子树进行分析,可以知道到X点距离为K的点的个数为2^k。这里需要特判,深度为K时最左边的编号不能大于N,点的个数就等于min(r,n)-l+ 阅读全文
posted @ 2023-09-24 14:56 不o凡 阅读(67) 评论(0) 推荐(0)
摘要:题意:给定一个数K,问第K小的数是多少,数字严格按照按321式递减 可知,数最大为987654321,可以暴力枚举 点击查看代码 #include<bits/stdc++.h> using namespace std; #define LL long long vector<LL> ans; LL 阅读全文
posted @ 2023-09-24 09:40 不o凡 阅读(44) 评论(0) 推荐(0)
摘要:贪心 做好优化,否者超时 对于第一位a,它只可能替换成a-1,所以如果在a到a-1的数字内只有a或者a-2,那么a-1就可以取代a。 因此我们可以开10个数组来存储每个数字的下标,对于每一位从0开始贪心的枚举每一位,如果有满足的j,那么直接替换,肯定有一个j满足要求(因为它自己肯定满足)。 代码里有 阅读全文
posted @ 2023-09-23 17:03 不o凡 阅读(11) 评论(0) 推荐(0)
摘要:二分查找+优先队列 先看要求:寻找r[i]值,使得在【i,r[i]】区间内数组A的和<=k[i]c[i],在【i,r[i]+1】数组A的和>k[i]c[i],且r[i]的取值在[i-1,n] 这个可以利用前缀和s数组来二分查找,寻找r[i]的值,利用函数upper_bounder(s+i,s+1+n 阅读全文
posted @ 2023-09-23 09:56 不o凡 阅读(14) 评论(0) 推荐(0)
摘要:H. Mad City 题意:b能否不被a抓到。 题解:这是基环树,只要b先与a在环上,b就永远也不会被抓到。 所以,此题就是求a,b到环上的距离,如果有一点b到环上的距离小于a,那么就永远也不会被抓到。 比较简单的找环的方式就是利用拓扑排序,然后就是最短路径的模板了(利用简单的bfs或者dfs就行 阅读全文
posted @ 2023-09-22 15:16 不o凡 阅读(114) 评论(0) 推荐(0)
摘要:双指针 创建l,r指针,r满足向右走sum+=a[r],r++,不满足l向右走sum-=a[l],l--; 当l==r使,r向右走 当高度不满足时,重新累计sum=0,l指针直接转向r,r++; 然后取r-l最大的区间 点击查看代码 #include<bits/stdc++.h> using nam 阅读全文
posted @ 2023-09-22 10:45 不o凡 阅读(45) 评论(0) 推荐(0)
摘要:G. ABBC or BACB 贪心 举个例子:BAAAA,BAAAAA,答案是A的总数 注意点:在连续的A中插入B,如:AAABABAA,AAABAA。很明显答案是A的总数减去最小的连续A的个数 点击查看代码 #include<bits/stdc++.h> using namespace std; 阅读全文
posted @ 2023-09-22 09:51 不o凡 阅读(74) 评论(0) 推荐(1)