题解
黑山咩
这个作者很懒,什么都没留下…
展开
-
暑假补题【7-1】(codeforces)Educational Codeforces Round 121 (Rated for Div. 2)
代码:原创 2022-07-01 14:54:32 · 181 阅读 · 1 评论 -
暑假补题[6-30](AtCoder)
三个数字,每次选择两个-1,或者全部-1,问最少多少次操作全是0.没法全是0就输出-1.思路:排序以后看差值就好了。B:给你nn的矩阵,这个矩阵由1~nn组成且满足一个条件:每个格子的行都有一个比他小,每一列都有一个比他大。思路:总方案数-不合法方案不合法的方案中, 不合法的格子(即既是一行中的最小又是一列中的最大)只会有一个, 那么我们可以枚举这个格子上的元素是什么, 把比它小的放在同一列, 比它大的放在同一行, 然后把其他的元素填在剩余的 (nn - (2 * n - 1))个格子中就行原创 2022-06-30 20:58:07 · 225 阅读 · 0 评论 -
暑假补题[6-29](牛客)
牛客练习赛101:A.贪心,(n - 1) * (最大值-最小值)B.第一个位置可以是0,或者1,那么后面就可以随便放置,因为如果a1后面的数字和是偶数,a1=1,如果是奇数,a1=0.思路:贪心的考虑每一位是不是能为0,该位为0的条件是先设该位置为1,如果说ai&该位置为1时>ai+1&该位置为1时,那么该位置为0,把剩下的位数都这样去构造。如果说最后构造的数字不能满足条件,那么当前位置就为1.D:思路:分为两种情况:1.当图上有环时,那么环上连通就可以无限路径.2.当是一颗树原创 2022-06-29 11:34:40 · 107 阅读 · 0 评论 -
经典水题板
二进制中1的个数:__builtin_popcount(n).区间选点,最大不相交区间数量#include <bits/stdc++.h>using namespace std;#define x first#define y secondconst int N = 1e5 + 100;pair<int,int> p[N];int cmp(pair<int,int> p1, pair<int,int> p2){ return p1.原创 2022-05-12 18:03:07 · 93 阅读 · 0 评论 -
算法模板-2022
目录:树和图字符串和字典树记忆化搜索排序及逆序对离散化树链剖分素数筛法:同余定理单调栈数学期望LCA树和图Acwing285. 没有上司的舞会Ural 大学有 N 名职员,编号为 1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行原创 2022-05-12 13:29:03 · 635 阅读 · 0 评论 -
Codeforces Round #782 (Div. 2)
#include<bits/stdc++.h>#define ll long long#define pd() printf("\n")#define pr(x) printf("%d", x)#define x first #define y second using namespace std; const int N = 4000; int main() { int T; scanf("%d", &T); while(T --){ ..原创 2022-04-27 19:37:26 · 205 阅读 · 0 评论 -
Acwing每日一题
#include <iostream>#include <cstring>#include <algorithm>#include <set>using namespace std;const int N = 10;char a[N][N];set<set<char>> ans[2];void insert(vector<vector<int>> ps){ set<char&..原创 2022-04-17 22:31:35 · 231 阅读 · 0 评论 -
ACwing线段树专题
#include<bits/stdc++.h>using namespace std;const int N = 5e5 + 10;int n, m, a[N];struct Node{ int l, r; int lmax, rmax, tmax, sum;}tr[N * 4];void pushup(Node &u, Node &l, Node &r){ u.sum = l.sum + r.sum; u.lmax =..原创 2022-04-11 10:27:59 · 382 阅读 · 0 评论 -
BFS模板
#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int T; cin >> T; while(T--) { int n, m; cin >> n >> m; vector..原创 2022-04-10 22:15:32 · 347 阅读 · 0 评论 -
dp复习【第一章】
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = new String(); string = scanner.next(); char[] st = new char[string.length()]; st = string.toChar..原创 2022-04-06 17:45:52 · 475 阅读 · 0 评论 -
第三届算法设计与编程挑战赛(冬季赛)
先小记录一下自己的排名 ,只能说很可惜,差个20名就金奖啦。但是只能说自己还是有东西没学,D题应该是可以做出来的,但是最后也没做出来,最后罚坐了两个小时.B题:题目很简洁,存在一个上升序列b使得原序列a和序列b的绝对值差值不超过eps,这道题的话一眼就觉得是个二分的题目,为什么这么说呢,因为对于eps来说,我们设答案的eps为ans,那么可得每个大于ans的eps都是符合题目要求的,对于每个可以符合要求的答案,我们用二分取最小的那个.(拿例子举例,如果eps是1000,那么肯定是符合题意的,但是10原创 2022-03-30 13:39:19 · 301 阅读 · 0 评论 -
最小生成树(Kruskal)
#include<bits/stdc++.h>using namespace std;const int N = 600, M = 360000;int n, k, xi[N], yi[N], tot;int fa[N];int find_fa(int x){ if(x == fa[x])return x; return fa[x] = find_fa(fa[x]);} vector<int> res;struct p{ int x,...原创 2022-03-10 20:21:58 · 116 阅读 · 0 评论 -
AcWing1295.X的因子链
分析:先把X分解质因数,即x = p1^k1 * p2 ^k2 …pct^kct.那么前面能分解后面的即是p1, p1p2, p1^2 p2, p1^2 * p2^2,… ,p1^k1 * p2 ^k2 …pct^kct这样的规律下去,那么这一条链子的最大长度就是k1+k2+…+kct.那么我们就可以得到序列:a1,a2,a3…,at.那么这样的序列一共有多少个呢?我们可以做一个映射:a1,a2/a1,a3/a2,…,at/at-1那么该序列就是原序列的增量序列,即改序列有多少种排法那么序列就有多少种,.原创 2022-03-07 20:27:20 · 223 阅读 · 0 评论 -
Acwing提高课:最小生成树
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 500;int n;int dist[N], g[N][N];bool st[N];int prim(){ memset(dist, 0x3f, sizeof(dist)); dist[1] = 0; int res = 0; f.原创 2022-03-05 10:41:37 · 99 阅读 · 0 评论 -
Tarjan算法例题及模板
#include<bits/stdc++.h>using namespace std;const int N = 10010 , M = 50010;int n, m;int h[N], e[M], ne[M], idx;int dfn[N], low[N], timestamp; // 时间戳int stk[N], top;bool in_stk[N];int id[N], scc_cnt; // 每个点所属分量编号int dout[N], Size[N]; // 出原创 2022-02-05 16:44:37 · 590 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2)--Codeforces--problem/991/E
题目链接:https://codeforces.com/problemset/problem/991/E思路:多重集合的排列前置知识:比如说有1,2,3三个数字那么他们构成的排列为全排列:1 2 3,1 3 2,1,2 1 3,2 3 1,3 1 2,3 2 1.那么就是n!(n=3)321=6种.那么如果说是有重复的,比如说1 1 2 3,那么就是也就是4!/(2!*1!*1!*1!)种情况了.那么这道题里面把每个数字出现的次数存储起来,然后dfs一下.sum为全部数字(包括前导0的情况原创 2021-12-08 21:27:13 · 141 阅读 · 0 评论 -
数位DP(包含例题和模板)
如上题所示意:f®-f(l-1)就是答案.那么f(n)要怎么求呢?先把n分解为m进制的l位.那么对于第i位来说,就只有0或者1,因为题目里面没有系数.如181818=242^424+212^121.而没有282828=242^424+3∗223*2^23∗22.从最高位到最低位,那么对于第i位来说如果第i位>1那么第i位可以是0(组合数学,第i位下面的i-1位可以填k-last(已经填了的1的个数)个1,即C[i-1][k-last] (下标从1开始,若是从零开始就是C[i][k-last..原创 2021-11-23 13:44:37 · 584 阅读 · 0 评论 -
KMP算法必备工具之---可视化KMP算法(输入母串和子串可以看到变化,再也不用手动一个一个去试了)
每次算KMP的时候都要消耗一张纸来进行模拟,非常的不方便,于是打算用计算机做一个可视化的kmp算法出来,花费了几十分钟的努力终于搞出来了.可以说是呕心沥血了.代码如下://^_^#pragma warning(disable:4996)#include<stdio.h>#include<stdlib.h>#include<string.h> #include<stdio.h>#include<cstring>#define MAX原创 2021-11-20 17:07:59 · 1225 阅读 · 3 评论 -
树状数组:楼兰图腾
在完成了分配任务之后,西部 314 来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V),一个部落崇拜铁锹(∧),他们分别用 V 和 ∧ 的形状来代表各自部落的图腾。西部 314 在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了 n 个点,经测量发现这 n 个点的水平位置和竖直位置是两两不同的。西部 314 认为这幅壁画所包含的信息与这 n 个点的相对位置有关,因此不妨设坐标分别为 (1,y1),(2,y2),…,(n,yn),其中 y1∼yn 是原创 2021-11-16 22:09:53 · 475 阅读 · 0 评论 -
ACwing第一章-动态规划dp之最长上升子序列模型
AC代码:#include<bits/stdc++.h>using namespace std;const int N = 150;int a[N],dp[N];int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ dp[i]=1; scanf("%d",&a..原创 2021-11-07 18:07:57 · 72 阅读 · 0 评论 -
心血来潮写一下组合数
组合数模板:#define ll long longconst ll mod = 555555555;ll c[5000][5000];void init(){ int i,j; c[0][0]=1; for(i=1;i<=4000;i++){ c[i][0]=1;c[i][i]=1; for(j=1;j<i;j++){ c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } }}设被行变换的数量为a,列变化的数量原创 2021-11-07 17:55:42 · 74 阅读 · 0 评论 -
ACwing第一章-动态规划dp之数字三角形模型
第一题:AC代码:(1)空间复杂度为O(n^2)的算法:#include<bits/stdc++.h>using namespace std;const int N = 150;int dp[N][N],a[N][N];int main(){ int T; scanf("%d",&T); while(T--){ memset(dp,0,sizeof(dp)); int r,c; scanf("%d%d",&r,&c); for(i原创 2021-10-25 18:27:01 · 110 阅读 · 0 评论 -
整数划分问题
dp优化:#include <iostream>using namespace std;const int N = 1010, MOD = 1e9 + 7;int dp[N];int main(){int n; cin >> n; dp[0] = 1; for(int i = 1; i <= n; i ++ ){ for(int j = i; j <= n; j ++ ){ dp[j]+=dp[j.原创 2021-10-03 16:39:56 · 64 阅读 · 0 评论 -
糖果传递与七夕祭
今天学了一个新的知识:ACwing122:糖果传递题解:如图,a1给an的糖果数目设为x1,a2给a1的糖果数目设为x2.已知最后每个人得到的糖果数目一样设为(avg).那么可以知道对于a1来说有方程->a1-x1+x2=avg.对于a2来说有方程->a2-x2+x3=avg…以此类推.我们可以把a1-x1+x2=avg转化成x1-x2=a1-avg.a2-x2+x3=avg转化为x2-x3=a2-zvg.…即x1-x2=a1-avg.x2-x3=a2-avg.…xn原创 2021-10-03 14:33:50 · 129 阅读 · 0 评论 -
2021-09-26动态规划
1.免费陷阱可以从后面一个时间开始往前推前面时间的状态:当前状态t-1获得的陷阱加上上个时间获得的陷阱.dp[t-1][x]+=max(dp[t][x],dp[t][x-1],dp[t][x+1]).AC代码:#include<iostream>#include<algorithm>#include<cstring>using namespace std;int dp[100011][15];int mmax(int a,int b,int c){原创 2021-09-27 11:34:54 · 96 阅读 · 0 评论 -
并查集例题及边带权和扩展域
A题:输入n个点(x,y).和两点至少距离d.然后分为两个操作:1.O p 修复p点。这时候遍历每个点如果两点距离小于d就放入一个集合.2.S l r查询l能不能到达r。AC代码:#include<iostream>#include<cmath>using namespace std;struct p{ int x,y;}a[2001];int fa[2001];int v[2001];int get(int x){ if(x==fa[x])retu原创 2021-09-20 20:12:50 · 68 阅读 · 0 评论 -
不含连续1的非负整数-力扣600
题意:给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数。示例 1:输入: 5输出: 5解释:下面是带有相应二进制表示的非负整数<= 5:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。说明: 1 <= n <= 10^9.思路:因为n的数据范围很大,暴力的话肯定是不行的.那么我们就使用01字典树来解决该问题.如下图:为什么要用原创 2021-09-11 15:33:45 · 211 阅读 · 0 评论 -
KMP算法,字符串哈希,最长公共子序列LCS,最长回文子序列LPS,AC自动机详细及模板
KMP算法能在线性时间内判定字符串A【1~N】是否为字符串V【1 ~M】的子串,并求出A在B中各次出现的位置.·原创 2021-09-04 22:30:45 · 345 阅读 · 0 评论 -
数论:唯一分解定理丶调和级数
H - Pairs Forming LCM今天又偷学了一手唯一分解定理的小知识:n=p1_11e1 *p2_22e2 *p3_33e3 *…*pk_kkk.设a,b为n的两个因子,则:a=p1_11a1 *p2_22a2 *p3_33a3 *…*pk_kkk.b=p1_11b1 *p2_22b2 *p3_33b3 *…*pk_kkk.推论:gcd(a,b)=p1_11min(a1,b1) *p2_22min(a2,b2) *p3_33min(a3,b3) *…*p原创 2021-08-31 17:35:30 · 141 阅读 · 0 评论 -
七夕没女朋友呜呜呜T_T (2021牛客七夕节场)
8.19一点凌晨睡不着 就想着来做点事 思来想去不如来写题算了 杭电多校和牛客竞赛的题还没补 来一边写一边补七夕场的题A题是一个二次元喂狗粮的问题就不写了┭┮﹏┭┮C题是一个开玩笑的题hhE是一个推理的也不写了0.0D-亲密数:这道题有个收获的地方就是求因子和:LL find(LL x){ int sum = 1, t = sqrt(x); for (int i = 2; i <= t; ++i) if (x % i == 0)原创 2021-08-19 03:33:18 · 131 阅读 · 2 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(8)Counting Stars
链接:题目题目大意:给出n个整数.有三种操作:1.询问[l r]的总和2.[l r]里面所有数减去x&(-x)也就是去掉最低位3.[l r]里面所有数加上2^k( 2^k<=x<= 2^k+1),也就是说加上一个二进制的最高位,比如1010+1000=10010,观察不免发现是最高位左移一位.思路:操作2就是去掉最低位,操作3就是最高位左移,那么我们就可以将一个数字拆成两部分 一部分是a1也就是最高位代表的数字,一部分是a2也就是剩下位代表的数字 (如:10110,那么a1原创 2021-08-13 20:13:09 · 138 阅读 · 0 评论 -
补题日记(持续更新)
第一天:牛客多校第五场D Double Strings链接:大佬的博客给定两个字符串A,B求长度相同的AB子串,使得子串的前面部分相等,且第一个不相等的位置B>A。求这样的子串个数。思路:f[i][j]表示A的前i个字符与B的前j个字符能组成多少相等的子串。自我理解:比如说abcd,abdc,那样遍历到b的时候由于前面a是一样的,那当前的字串数量f[i][j]就会加上前面的字串数量+f[i-1][j-1],(也就是加上a时的数量),其他情况下就是加上大一点的那个,f[i][j]=((f[i原创 2021-08-12 03:49:33 · 269 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(6)Median
杭电7029 MedianAC代码:#include<bits/stdc++.h>const int N= 1e5+10;using namespace std;#define ll long longll a[N],b[N];int main(){ int T; cin>>T; while(T--){ ll num=0,n,m; cin>>n>>m; memset(a,0,s原创 2021-08-07 18:14:17 · 91 阅读 · 0 评论 -
King of Range
题意:输入一个长度为n的数组,有m次询问,每次询问输入一个整数k,求有多少个区间的最大值和最小值的差大于k思路:st表求最大最小值,但是查询时要用到双指针(就是没用这个所以没过).ST表ST表的功能很简单它是解决RMQ问题(区间最值问题)的一种强有力的工具它可以做到O(nlogn)预处理,O(1)是查询最值像线段树是O(logn)的查询AC代码:#include<algorithm>#include<iostream>#include<cs原创 2021-08-01 11:33:40 · 68 阅读 · 0 评论 -
2021牛客暑期多校训练营1
A题:枚举每个sum,i代表n,j代表m,即求出sg函数注意:要用bitset不能用bool不然会超时#include<iostream>#include<string>#include <bits/stdc++.h>using namespace std;const int N = 5005;bitset<N> F[N];void pre(){ for(int sum=0;sum<=10000;sum++){ for(i原创 2021-07-21 20:33:27 · 77 阅读 · 1 评论 -
BNUZ [kuangbin带你飞] 最小生成树
There are N small balls with same weight in horizontal smooth plane. And the volume of these balls can be negligible. All the balls are on the same straight line. There are three possibilities for their initial speed $$$v_0$$$ which is -1 m/s, 0 m/s and 1原创 2021-07-12 15:22:06 · 83 阅读 · 0 评论 -
Codeforces Round #729 (Div. 2)
A题:大意就是说给你一个数字n,输入2*n个数,这些数里面能不能全部两两相加结果为奇数,这样就分为三种情况:1.奇+奇=偶,2.奇+偶=奇,3.偶+偶=偶.那样就必须全部都是1奇配1偶才行)所以统计奇的数量和偶的数量是不是相同就行了AC代码;#include<iostream>using namespace std;int main(){ int t; cin>>t; while(t--){ int n,f1=0,f2=0; cin>>n;原创 2021-07-04 11:46:06 · 127 阅读 · 0 评论 -
矩阵快速幂例题
例题一:A. Tetrahedrontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output题解:容易看出这是一个指定路径数求方案数的题目,可以用矩阵快速幂来求解。矩阵快速幂解法:#include<iostream>#include<cstring>#define ll long longusing name原创 2021-05-16 21:49:39 · 290 阅读 · 0 评论 -
2021 BNUZ IT节 程序设计竞赛网络赛
题解特拉福珠宝俱乐部大奉卖笔人我的徒弟都是实习生快穿之我只想测身高游戏败家子北宋大烟篓超神排位赛我有一座研究院特拉福珠宝俱乐部解法一:暴力dfs,每个源点都去dfs一边,非常的暴力hhh:复杂度O(n^2)#include<iostream>#include<queue>#include<cstring>#define ll long longusing namespace std;int n, tot;int ver[100010], edge[1原创 2021-05-10 19:37:44 · 209 阅读 · 0 评论 -
[2021-4-23]BNUZ套题比赛div3
[2021-4-23]BNUZ套题比赛div3A - Spy Detected! CodeForces - 1512AA - Spy Detected! CodeForces - 1512A当时没看数据范围,可以用map写,那样可以储存很大的数,然后发现不需要,代码如下:#include<iostream>using namespace std;#include<cstring>#include<map>int main() { int t; cin原创 2021-04-24 12:31:07 · 159 阅读 · 0 评论