ACM算法
滚雪球~
这个作者很懒,什么都没留下…
展开
-
计算几何总结与题目
参考:https://www.acwing.com/activity/content/code/content/635453/1. 前置知识点 (1) pi = acos(-1); (2) 余弦定理 c^2 = a^2 + b^2 - 2abcos(t)2. 浮点数的比较const double eps = 1e-8;int sign(double x) // 符号函数{ if (fabs(x) < eps) return 0; if (x < 0)原创 2022-05-09 03:02:05 · 203 阅读 · 0 评论 -
背包问题相关
Google Kickstart2019 Round B Problem B能量石链接:https://www.acwing.com/problem/content/736/类似玩杂质的牛与国王游戏如果最终方案中相邻的两石头为l[i]/s[i]<l[j]/s[j]l[i]*s[j]<s[i]*l[j]则这两石头的收益和ei-(s[1]+…s[i-1])*li+ej-(s[1]+…s[i])*lj如果交换它们ej-(s[1]+…s[i-1])*lj+max(0,ei-(s[1]+原创 2022-04-25 18:54:31 · 2079 阅读 · 0 评论 -
最长上升子序列与相关题目
贪心的二分实现代码可以发现和求lis是一样的原创 2022-04-22 15:43:46 · 118 阅读 · 2 评论 -
数论题目与题解
组合数公式C(n,m)=n*(n-1)……(n-m+1)/m!885.求组合数 I链接:https://www.acwing.com/problem/content/887/给定 n 组询问,每组询问给定两个整数 a,b,请你输出 C(a,b)mod(10^9+7) 的值。f[i][j]=f[i-1][j-1]+f[i-1][j]#include<bits/stdc++.h>using namespace std;const int mod=1e9+7;const int N=原创 2022-03-17 18:38:40 · 500 阅读 · 0 评论 -
博弈论分析与题目
https://www.luogu.com.cn/problem/P2197经典Nim问题,即石头全为0时为异或状态。如果石头异或起来>0,假设为x,x的二进制1出现的最高位为k,必定可以找到一个数ai在第k位为1,将这个数ai与答案x异或,出现的结果必定<ai^x,即ai可以拿了变小。需要拿ai-ai xor x个,这样原来是a1 xor a2 …xor an=x,现在变成了a1 xor a2 …xor an xor x=x xor x,必定可以转换为异或为0的状态,同样的对于任意一个原创 2022-03-17 15:42:20 · 208 阅读 · 1 评论 -
贪心算法题解即相应的证明
905.区间选点链接:https://www.acwing.com/problem/content/907/给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。解法:按终点排序,每次选尽可能靠右的,某项不符合,则需要选它。证明:上面算出来的答案为cnt,正确答案为ans。需要证明cnt>=ans,cnt<=ans。首先cnt这个为一个合法的方法,必定大于等于标准答案。对于cn原创 2022-03-16 18:06:33 · 980 阅读 · 0 评论 -
acwing数论笔记
筛法求质数时间复杂度质数定理:1-n中有n/(lnn)个质数原创 2022-02-22 23:53:13 · 311 阅读 · 0 评论 -
图论各类算法与题目
853.有边数限制的最短路https://www.acwing.com/problem/content/855///https://www.acwing.com/problem/content/855/#include<bits/stdc++.h>using namespace std;const int N=505;struct edge{ int x,y,z;}e[10005];int dist[N],last[N];int n,m,k,x,y,z;void ..原创 2022-02-22 00:47:58 · 329 阅读 · 0 评论 -
leetcode与各类比赛的位运算题目
leetcode 1494.并行课程 IIhttps://leetcode-cn.com/problems/parallel-courses-ii/可以学到如何暴力枚举一个01位状态(1表示可以选)的各种可选状态01位。状态转移,i到j如果是合法的,则代价为1进行转移。注意对于i直接枚举j是会超时的,正常的方法是对当前的01状态维护各类1的子状态,可枚举的选法为s,则暴力枚举各类选法就是**for(x=s;x;x=(x-1)&s)**即可。class Solution {public:原创 2022-02-21 02:46:20 · 91 阅读 · 0 评论 -
hash字符串哈希
https://www.acwing.com/problem/content/843/求l->r的哈希值h[r]-h[l-1]*P^(r-l+1)注意要取模,可以用无符号的unsigned long long进行自然溢出//https://www.acwing.com/problem/content/843/#include<bits/stdc++.h>using namespace std;typedef unsigned long long ULL;const int原创 2022-02-16 00:34:03 · 386 阅读 · 0 评论 -
C++数组模拟单链表与双链表
https://www.acwing.com/problem/content/828/#include<bits/stdc++.h>using namespace std;const int N=100005;int ne[N],value[N];char op;int n,x,w,head,y;int main(){ cin>>n; while(n--){ cin>>op; if(op=='H'){原创 2022-02-15 03:16:40 · 321 阅读 · 0 评论 -
c++进行数据离散化
题目链接:https://www.acwing.com/problem/content/804/核心stl语句: sort(alls.begin(),alls.end()); alls.erase(unique(alls.begin(),alls.end()),alls.end());//https://www.acwing.com/problem/content/804/#include<bits/stdc++.h>using namespace std;const原创 2022-02-13 02:32:59 · 243 阅读 · 0 评论 -
线段树题目
链接:https://www.acwing.com/problem/content/description/247/246. 区间最大公约数区间加数,求区间gcd。n,q<=500000#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=500005;struct node{ int l,r; LL sum,d;}tr[N*4];int n,m,x,y;L原创 2022-02-12 03:47:52 · 557 阅读 · 0 评论 -
leetcode 2166 设计位集直接用bitset做
参考:https://leetcode-cn.com/problems/design-bitset/用C++中stl中自带的bitset做,注意的是bitset得固定申请大小,不能动态在函数中申请,所以在最开始先申请好,之后在求all,one,count的时候要注意处理,即最后一段数是不会被修改的全0或者全1,用标记计算即可。class Bitset {public: bitset<100001>s; int n,other; Bitset(int size) {原创 2022-02-11 20:05:50 · 5454 阅读 · 0 评论 -
康托展开 与 康托逆展开
题目:https://www.luogu.com.cn/problem/P5367#include<bits/stdc++.h>using namespace std;const int N=1100000;const int MO=998244353;typedef long long ll;ll a[N],n,t[N],min_num,b[N],ans;ll lowbit(ll x){ return x&(-x);}ll query(ll x){ ll res=原创 2022-01-04 17:29:49 · 227 阅读 · 0 评论 -
【VS Code】安装 LeetCode 插件
参考:https://www.cnblogs.com/gl1573/p/11262333.html安装完成之后,左边会出现一个 LeetCode 图标,见下图:登录 LeetCode点击【LeetCode】图标,然后点击登录 LeetCode 账户。然后你很可能就登录失败了。报 invalid password,你以为是密码输错了,然后就重试了一遍又一遍,结果还是不行。崩溃!!!LeetCode 目前有英文版(leetcode.com)和中文版(leetcode-cn.com)两种版本。点击原创 2022-01-04 16:02:14 · 2893 阅读 · 0 评论 -
模拟退火过程
https://www.luogu.com.cn/problem/P1337#include<bits/stdc++.h>using namespace std;const int N=1100;int n;double x,y,a[N],b[N],c[N],ans;const double down=0.998;double GetAns(double x,double y){ double res=0,dist; for(int i=1;i<=n;i++) dis原创 2021-12-21 00:36:22 · 234 阅读 · 0 评论 -
面试非重复数字的全排列
akuna的电面题 脑子晕了没想出标算/// Permutation: all possible result of permute a list of numbers , for example [1,3,5] → [1,3,5],[1,5,3],[3,5,1],[3,1,5],[5,1,3],[5,3,1]/// [1,1,5] ->原创 2021-09-16 15:01:28 · 111 阅读 · 0 评论 -
左偏树luogu3377
参考:https://www.luogu.com.cn/problem/P3377参考:https://www.luogu.com.cn/blog/hsfzLZH1/solution-p3377实际上就是可并堆。一般思路:比较两个堆的堆顶x,y,如果x>y,则交换。之后把x的其中一个儿子节点与y为顶的堆合并,不断重复以上这个过程即可。但是容易发现,如果合并起来是个长链,并且数据针对设计,每次都接在最长链上,这样每次合并的复杂度会变成o(n)。可以考虑让堆“倾斜”,即左儿子的dist必定&g原创 2021-08-23 16:16:15 · 184 阅读 · 0 评论 -
c++函数中加入&,vector int int[]对全局的影响
题目:https://leetcode-cn.com/problems/single-threaded-cpu/vector作为变量,如果不加&相当于函数中单独开辟,如果加了&,则和外面的是一个对象#include<bits/stdc++.h>using namespace std;struct data{ int start,duration,id; bool operator<(const data &b)const{ i原创 2021-04-23 13:35:38 · 349 阅读 · 0 评论 -
leetcode sort与对vector进行sort 结构体 重载运算符
参考:https://leetcode-cn.com/problems/single-threaded-cpu/submissions/class Solution {public: struct data{ int start,duration,id; bool operator <(const data &b)const{ if(duration>b.duration)return 1; if原创 2021-04-23 13:17:09 · 410 阅读 · 0 评论 -
mac安装Noi Linux与使用
要在mac上安装Noi Linux环境需要Noi Linux的镜像和VirtualBox软件下载地址:https://www.jisuanke.com/download参考:https://blog.csdn.net/EricNTH/article/details/104499438参考:https://www.jisuanke.com/course/3515/245614下载VirtualBox安装完成,接下来需要创建虚拟机输入想要的名称,选择Linux,Ubuntu(64-bit)一路原创 2021-04-22 14:15:34 · 1026 阅读 · 2 评论 -
C++:rand()随机数和mt19937随机数
参考:https://blog.csdn.net/qq_42780289/article/details/91348748题目:https://codeforces.com/contest/1514/problem/D注意这里不能用rand(),因为rand()的随机范围小,需要使用mt19937随机数一、rand()随机数范围:0~32767二、mt19937随机数范围:无限制,但是可以自己设定。#include<bits/stdc++.h>using namespace st原创 2021-04-20 12:09:15 · 634 阅读 · 0 评论 -
最小表示法
参考:https://blog.csdn.net/zy691357966/article/details/39854359题目:https://www.luogu.com.cn/problem/P1368题目:https://www.luogu.com.cn/problem/P17092021.4.18腾讯实习生笔试遇到了本质上就是优化后的字符串匹配luogu 1368#include<bits/stdc++.h>using namespace std;const int N=3原创 2021-04-19 17:55:29 · 71 阅读 · 0 评论 -
leetcode 179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。参考:https://leetcode-cn.com/problems/largest-number/class Solution {public: string largestNumber(vector<int>& nums) { int n=nums.size(); string s[110]; for(int i=0;i<原创 2021-04-14 01:38:38 · 129 阅读 · 0 评论 -
质数筛
https://codeforces.com/problemset/problem/1512/G#include<bits/stdc++.h>using namespace std;const int N=11000000;bool IsPrime[N];int Prime[5000000];int cnt,d[N],ans[N],pre[N],T,x;void Get_Prime(int n){ memset(IsPrime,true,sizeof(IsPrime));原创 2021-04-12 18:55:23 · 97 阅读 · 0 评论 -
纯手写输入二叉树并建树输出前序(输入格式为[3,9,20,null,null,15,7])
纯手写输入二叉树并建树输出前序链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/题目简单,但是如果输入的二叉树只是一个字符串,需要自己进行处理与建树,则难度增加很多。#include<bits/stdc++.h>using namespace std;struct node{ node *left,*right; int value;};queue<n原创 2021-03-30 22:53:17 · 607 阅读 · 0 评论 -
二分查找
luogu 2249 【深基13.例1】查找链接:https://www.luogu.com.cn/problem/P2249l+1<r的二分,最后状态l+1==r//保证a[l]<x&&a[r]>=x的二分#include<bits/stdc++.h>using namespace std;int n,m,l,r,mid,a[1100000],x;int main(){ scanf("%d%d",&n,&m); for(int原创 2021-03-24 14:47:29 · 99 阅读 · 0 评论 -
快速排序模板
luogu 1177链接:https://www.luogu.com.cn/problem/P1177#include<bits/stdc++.h>using namespace std;int a[110000];int n;void qsort(int l,int r){ int left,right,temp; left=l; right=r; temp=a[(l+r)/2]; while(left<=right){原创 2021-01-02 17:32:09 · 218 阅读 · 0 评论 -
堆优化dijkstra
题目链接:https://www.luogu.com.cn/problem/CF20C本题是最短路模板题spfa的做法//spfa#include<iostream>#include<stack>#include<queue>#include<cstring>using namespace std;stack<int>st;struct edge{ long long n,o,v;}e[200005];long long原创 2020-10-22 18:36:42 · 309 阅读 · 0 评论 -
逆元求法 费马小定理
参考:https://www.cnblogs.com/liziran/p/6804803.html求组合数取模原创 2020-08-21 14:18:25 · 240 阅读 · 0 评论 -
树的题目与树形dp题目
luogu 1352 没有上司的舞会https://www.luogu.com.cn/problem/P1352题解:f[i][0]表示这个点不取的情况下的最优解,那它下面的点是可选可不选的状态,所以它的转移为sum(max(f[j][0],f[j][1])),f[i][1]表示这个点是取的状态,那么它下面一层是不能选的,转移方程为sum(f[j][0])+a[i]#include<bits/stdc++.h>using namespace std;struct edge{ int原创 2020-07-08 22:44:24 · 135 阅读 · 0 评论 -
字典树tire练习
字典树tire一般用来对大量的单词状况进行存储,因为单词的前缀是大量重复的,且每一步都是a-z共26种可能的延伸,故我们创建一个字典树后能够把前缀相同的单词前缀都设置为一样。模版题:luogu 2580 于是他错误的点名开始了https://www.luogu.com.cn/problem/P2580#include<bits/stdc++.h>using namespace std;int trie[510000][26],a[510000];char s1[60];int n,原创 2020-06-09 10:42:03 · 182 阅读 · 0 评论 -
堆和优先队列的练习
模版:luogu 3378 【模板】堆手写堆版本#include<bits/stdc++.h>using namespace std;int cnt,heap[1100000];int op,x,n;void heap_add(int x){ cnt++; heap[cnt]=x; int now=cnt; while(now>1&&heap[now]<heap[now/2])swap(heap[now],heap[now/2]),now>原创 2020-06-01 16:59:45 · 160 阅读 · 0 评论 -
luogu 2184 贪婪大陆
题目链接:https://www.luogu.com.cn/problem/P2184题目大意,区间上进行两种操作。操作一:在l-r之间埋上一种地雷。操作二:询问在l-r之间有多少种地雷。题解:线段树或者树状数组都可以。对于询问l-r之间有多少地雷,可以理解为首部在r之前的线段段数减去尾部在(r-1)之前的线段段数,所以对于埋地雷的操作l-r,可以理解为在两个线段树上的某个位置加一,询...原创 2020-04-30 23:51:30 · 187 阅读 · 0 评论 -
luogu 1144 最短路计数
题意:图上的边长全是1,求从起点到每个点的最短路的条数。题目链接:https://www.luogu.com.cn/problem/P1144因为图是特殊的边长为1的图,所以其实是可以用bfs的,如果用spfa的话会发现任何一个点只可能进一次队列。如果图的边长不一定,则不能直接用简单的path数组同步更新松驰,然后进队出队,会出现错误。如果图的边长不一定,需要path数组和final数组共...原创 2020-04-20 02:02:03 · 149 阅读 · 0 评论 -
Java字符串处理:luogu 1205 [USACO1.2]方块转换 Transformations
题目链接:https://www.luogu.com.cn/problem/P1205暴力依次模拟翻转即可。题目不难,不过本题做的时候有个地方调了很久。package luogu;import java.util.Scanner;public class Luogu{ static char[][] c; public static void main(String[] args) ...原创 2020-04-09 23:12:29 · 303 阅读 · 0 评论 -
Java代码:luogu 1522 [USACO2.4]牛的旅行 Cow Tours
题目链接:https://www.luogu.com.cn/problem/P1522题意:有很多牧区,一些相连的牧区形成了牧场,连接两个不在同一个牧场的牧区,形成一个大的牧场,要使得这个新牧场中最远的两个牧区距离尽量小。N<=150。题解:dfs处理出所有的牧场,用floyd或者spfa求出同一牧场中点对之间的距离,然后求出距离每个点最远的点的距离。之后暴力枚举所有的连边方式,最长...原创 2020-04-06 22:19:30 · 162 阅读 · 0 评论 -
POJ 3783 鹰蛋问题,非常好的DP题目
题目大意:N个蛋M层楼,问至少需要多少次数可以精确确定蛋会在几楼打碎,打碎的蛋不能再用,没打碎的蛋可以继续试验。很多人第一时间会想到二分,其实并不是,比如1个蛋100层,直接从50层开始扔,则直接碎掉了,肯定是不行的,唯一的方法就是从一楼一层层往上试。比如现在还剩i个蛋有j层,想知道这么一个状态所需要的次数是多少,用f[i][j]表示当前状态。暴力枚举现在的第i个蛋扔在第k层(k是暴力寻找的...原创 2020-03-23 19:46:14 · 943 阅读 · 0 评论 -
luogu 2151 [SDOI2009]HH去散步 矩阵乘法
题目意思:从起点到终点,不能连续走同一条边(即走过来又走回去),问走t步从起点到终点共有多少种走法。如果可以走同一条边,那就是经典的矩阵乘法加速路径算法,对整个图存下相应的点连接关系作为矩阵,然后相当于乘很多次这个矩阵,可以直接用矩阵乘法加速。但是这里多了个条件,不能连续走相同的边(走过来又走回去),一个好的处理方法是以边作为标准,任何一条边可以理解成两个方向的两条边,我们将一条边拆成来回两个...原创 2020-03-16 00:57:14 · 129 阅读 · 0 评论