基础算法
文章平均质量分 58
做回甲乙丙丁
这个作者很懒,什么都没留下…
展开
-
GYM闲逛 : CodeRams Algorithm Contest #2-6. Favorite Product
这场其他比赛也是挺有意思的,同学们可以去看看都没有特别难的!传送门(题目链接)题面详解: 给你 嗯 个数 从中挑三个使得这三个之积等于 凯 ,求方案数思路:枚举1.枚举 a * a * a == k2.枚举 a * a * b == k3.枚举 a * b * c == k分析结束;//Andong 2021/2/20 22:04ll a[maxn];int main() { ll n, k, tmp, MAX = 0; scanf("%lld%lld", &n原创 2021-02-20 22:07:20 · 210 阅读 · 0 评论 -
ZCMU 1743: 铺地毯 2月3号每日训练
题面为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯,一共有n张地毯,编号从 1 到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。Input输入共 n+2行。第一行有一个整数n,表示总共有 n张地毯。接下来的 n行中,第 i+1行表示编号 i的地毯的信息,包含四个原创 2021-02-03 19:47:59 · 134 阅读 · 0 评论 -
zcmu 5142: 巴比伦塔
Description有n(n<=30)种砖块,已知三条边长,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(每个砖块可以自行选择一条边作为高),使得每个砖块的底面长宽分别严格小于它下方砖块的底面长宽,求塔的最大高度。(多组输入,有n == 0的情况,数据都在int范围内)Input第一行 T 组 nn个方砖a,b,c砖的三维.(T<=100,n<=30,0<= a,b,c<=1e6)Output见样例Sample Input4110 20 30原创 2021-01-29 20:56:44 · 328 阅读 · 2 评论 -
kaungbing 匹配练习
HDU 1045 Fire Net题面:给你一个不大于4*4的方格然后中间会有障碍格子,问其中能最多有多少个标记的方格,是无法直接(横竖方向上没有标记,或者被障碍挡住)达到的,看样例应该也能懂;题解:每一个 行 对应一个 列 如果一行之中多了一个障碍物 分割了这一行那么当作新 行 来算 ,同理 列也是那么处理(这题爆搜也能过,不过和我预想练习的目的不一致就不在此解答了)#include<cstdio>#include<iostream>#include<cmath&原创 2020-11-14 15:23:41 · 142 阅读 · 0 评论 -
PTA 1056 Mice and Rice (25分)
题面:自己读,甲级题面自己读;神奇的做法 一开始以为就是一个堆栈的模拟 没考虑到复杂度写到一半发现 查找中位数的复杂度实在是太高了O(nnlog) 那不就裂开了嘛后来想到 中位数 可以单独维护一个数组什么的就可以了 就去自己的知识图谱里去找有没有可以维护的一个知识点 说到查找就想到了一个二分 然而二分的是有序 的数组 而且得连续 然后瞄了一眼数据范围 发现友好的n(1e5)想到这点 就想到了 树状数组去维护一个数字出现的次数 然后query 查询的复杂度是O(log(maxn))的那就有思路了 开干原创 2020-11-07 13:49:30 · 93 阅读 · 0 评论 -
主席树集合
链接转载 2020-11-06 12:35:47 · 88 阅读 · 0 评论 -
2019 CCPC 秦皇岛 A. Angle Beats
题面链接题目大意: 在二维平面上 给你n个点 有q次查询 每次查询会有一个坐标Q,询问 有多少点对 和 Q点 能组成直角三角形;思路:分两个情况:一:Q点是直角顶点 二:Q点不是直角顶点;第一个情况:只需要看有多少个和Q点组成的斜率互乘为-1,第二个情况:就是看Q点和任意一个点 组成的直线的斜率 和 这个点 和 点集合中的点组成的直线有没有存在互乘为-1的注意点: 会有卡时间需要注意不要用map 建议用哈希查找表 或者 hash_map 或者 unordered_map维护时间.原创 2020-10-27 17:01:16 · 160 阅读 · 0 评论 -
洛谷 P1005 矩阵取数游戏
题面描述明显dp,看着像区间dp,状态是由大到小写的也可由小到大.这边展示两种转移方式的代码不同的是从大到小要预处理一下2的幂级数速度上没明显差//small->big#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll lo原创 2020-07-29 16:58:13 · 97 阅读 · 0 评论 -
2020牛客多校第五场 B-graph
CodeForces 888G Xor-MSTCF888G的题解题目变式:预处理一下就当888G做#include <bits/stdc++.h> using namespace std; #define ll long longll input(){ ll x=0,f=0;char ch=getchar(); while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar(); while(ch>.原创 2020-07-27 22:29:14 · 220 阅读 · 0 评论 -
异或树 CodeForces 888G Xor-MST
传送门朴素的Borůvka简要说明:1.用数组记录每个子树的最近邻居。(类似Prim)2.对于每一条边进行处理(类似Kruskal)如果这条边连成的两个顶点同属于一个集合,则不处理,否则检测这条边连接的两个子树,如果是连接这两个子树的最小边,则更新由于每次循环迭代时,每棵树都会合并成一棵较大的子树,因此每次循环迭代都会使子树的数量至少减少一半,所以,循环迭代的总次数为O(logn)O(logn)O(logn)。每次循环迭代所需要的计算时间:第2步,每次检查所有边O(m)O(m)O(m),去更新原创 2020-07-27 22:27:53 · 172 阅读 · 0 评论 -
2020牛客多校训练 E-Easy Construction
题意 给定 n,k,问是否可以构造一个 1~n 的排列 P,使得对于 1~n 中任意的数 i,P 都存在一个 长为 i 的子区间,其和模 n 余 k。有解输出任意一组,无解输出 -1。思想:分 奇偶讨论可以依次添加,偶数只有k=(n+1)*n/2%k 奇数只有k=0 #include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#in...原创 2020-07-27 22:22:58 · 148 阅读 · 0 评论 -
2020牛客多校第六场 B Binary Vector
对就是这样#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;const int INF = 0x3f3f3f3f;const double pi=acos(-1),eps=1e-8;const int maxn = 1<<17;const int mod = 1e9+7;const int N = 2e7+10;i...原创 2020-07-27 20:45:39 · 110 阅读 · 0 评论 -
2020牛客多校第六场 K K-Bag
题意• K-bag序列定义为由多个1-k的排列顺序连接起来的序列• 想问你给定序列是不是k-bag的连续子序列思路:离散化+动态规划动态规划部分需要证明一个可行区间,可行区间的意思就是在[x-k,x]范围内无同类的数字,标记下标 lp[i] 表示上一个可行区间([lp[i],i).然后dp[i]表示当前位置作为环结是否合法.然后只要满足当前位置是个合法环结且lp[n]<=i+1即可#include<bits/stdc++.h>#include<iostream>原创 2020-07-27 20:29:02 · 174 阅读 · 0 评论 -
2020牛客多校第三场 F-Fraction Construction Problem
#include <bits/stdc++.h>using namespace std;using ll = long long; const int N = 2e6 + 5;bool isnp[N];int pfactor[N];vector<int> primes; void init() { isnp[0] = isnp[1] = 1; pfactor[1] = 1; for (int i = 2; i < N; ++i) {.原创 2020-07-24 19:46:10 · 172 阅读 · 0 评论 -
2020牛客多校第三场-J Just Shuffle
题面:初始序列1,2,3,4,5…设为a,有一个置换p,a置换k次后成了b;题目给了b,k,求a置换一次的结果;解法:对于b可以求出一些循环节,长度设为r,设一个数z,使得zk%r==1;即a转zk次后为1;即是答案;z可以用逆元也可以直接试,不超过r;#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm&g原创 2020-07-24 19:15:00 · 96 阅读 · 0 评论 -
2020牛客多校第二场 F.Fake Maxpooling
谜一样的题目 看到有倍增的做法,偷懒的,双向队列维护矩阵的,奇奇怪怪的,//偷懒的#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll long longusing namespace std;const int INF=0x3f3f3原创 2020-07-14 22:22:45 · 121 阅读 · 0 评论 -
2020牛客多校第二场 C,Cover the Tree
题面不上了给个链接题意:因为给的是一个生成树 ,随机选两个点(链)就会找到一条唯一的路径,然后题目要求选尽量少的链去覆盖全部路径,问你的方法最少是几个然后输出点对。样例解释:答案是22 34 52 3覆盖了2-1,1-3;4 5覆盖了4-2,2-5 那么所有的边被覆盖;思路:先找出所有度数为1的点,再找出一个度数不为1 的点作为源,从这个圆开始dfs找出所有度数为一的次序(用vector维护)这样找出来有个好处不会出现例外情况下面会解释例外,然后所有点对按照dfs序差距超过一半配对,奇原创 2020-07-14 22:15:36 · 159 阅读 · 0 评论 -
2020牛客多校第二场 B.Boundary
题意:选择一个点使得这个点构成的圆 经过远点和其他点要求 求出经过点最多的圆的点的个数;解法:pair 维护点个数和坐标,最后找最多的那个;坑点:注意共线,注意最后可能是一个或者两个点的例外情况,注意公式正确代码:#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmat.原创 2020-07-14 22:04:02 · 223 阅读 · 0 评论 -
牛客暑期多校训练营(第一场)J
转载:https://blog.csdn.net/weixin_43911947/article/details/107309924hit:用分部积分法求定积分,如下图解所以只需要求n ! ^ 2 / ( 2*n + 1 ) !就可以了 (!为阶乘).由于n会比较大,用于除法会失精度,因此需要用到费马小定理:(当mod为质数时)a / b % mod = a * qpow(b , mod - 2) % mod;(qpow是快速幂)#include<bits/stdc++.h>转载 2020-07-14 21:55:41 · 127 阅读 · 1 评论 -
桶排序/基数排序 图文理解(java and c/c++实现)
今天做了个后缀数组 , 其中有部分代码需要基排思想所以温故一下,开始讲解吧;基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r )m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。操作过程(1)假设有欲排原创 2020-07-13 10:28:00 · 158 阅读 · 0 评论