算法
文章平均质量分 56
ccaicaic
这个作者很懒,什么都没留下…
展开
-
一些小杂碎
基环树定义基环树,又叫环套树,特点为n个点n条边,即可以视为树加一个边,拥有一个唯一的环。题型给定n个点n个无向边,给这些无向边设定方向若是非环路径:随便设定方向即可;若是环上路径:需要同时逆时针或者顺时针;如何找环:无向图有向图找环添加链接描述运算符&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。int与string,char添加链接描述C++ 中的INT_MAX,INT_MIN添加链接描述...原创 2022-03-19 23:04:00 · 748 阅读 · 0 评论 -
动态规划举例
动态规划将大问题化为若干个小问题,通过小问题的最优解得到大问题的最优解,自底向上的解决问题例子斐波那契数列斐波那契数列是经典的动态规划,这里不再过多介绍了走楼梯问题现共有n个阶梯,A想要从一楼走到二楼,因腿长的限制,她一步可以跨一个或两个阶梯,且只能向上走(即若A正在第x个阶梯上,它可以选择到第x+1或第x+2个阶梯),请问他有多少种方法可以上到实训二楼。思路按照动态规划的思想,首先建立递推关系;定义a[i]为从第0个阶梯到第i个阶梯有多少种方法;那么假如我们现在在第i个阶梯,a[i]之原创 2022-03-16 23:35:49 · 88 阅读 · 0 评论 -
数论基础入门
一些知识整除自然数a可以被自然数b整除或者说b是a的约数表示的是:a%b=0a\%b=0a%b=0,即a是b的倍数,b是a的约数(不要弄反了),记作b|a。(0是自然数也是整数)质数(素数)和合数指在大于1的自然数中,除了1和它本身不再有其他因数的自然数(如:2,3,5);一个大于1的整数,如果除了1和它本身以外,还有其他的约数,这样的数就叫作合数。素数的分布目前素数的分布还不能确定,但是能够给出一个近似分布,π(n)\pi(n)π(n)为不超过n的质数的个数,π(n)∼nlnn\pi(n)原创 2022-03-16 20:37:49 · 765 阅读 · 0 评论 -
组合博弈 SG函数
(给大家安利一部相关电影《美丽心灵~》)石子游戏有若干堆石子,每堆石子的数量有限,合法的移动是选择一堆石子并拿走若干颗(不能不拿),如果轮到某个人时所有的石子都被拿完了,则该人失败。这是一个先手必胜或者必输的组合博弈游戏,具体必胜或是必输取决于石子个数的值定义1.无法进行任何合法移动的局面为P-position(即失败局面)2.可以通过一次合法移动到达P-positon的点为N-position(一次就够了,想赢的人一定会选这个策略的)3.所有合法移动都到达N-position的点(即没有任何原创 2022-03-14 20:03:49 · 3418 阅读 · 0 评论 -
快速幂(含矩阵)
快速幂题目思路由数据规模,如果暴力惩罚的花,那就是2的31(a的b次方),肯定不行假如是求a的1101(二进制)次方,(以下数都表示二进制)那么可以拆解为a的1次方乘以a的00次方乘以a的100次方乘以a的1000次方代码这种算法将复杂度降低约为logbint main(){ long long a,b,k,ans=1; //数据那么大,记得开longlong cin>>a>>b>>k; if(b==0) { cout<<1%原创 2022-03-14 10:50:17 · 306 阅读 · 0 评论 -
DFS+BFS
DFS深度优先搜索,类似于树的先序遍历(第一次学DFS是在图中遇到的,那就先回顾下图里的DFS)代码(以邻接表为例)基于邻接表的复杂度为O(n+e),而基于邻接矩阵要O(n方)void DFS_Visit(Graph &G){ for(int i=0;i<G.vexnum;i++) { visit[i]=false;//初始化 } for(int i=0;i<G.vexnum;i++) { if(visit[i]==false) { DFS(G,i原创 2022-03-14 08:57:47 · 108 阅读 · 0 评论 -
递归算法优化
Description假设该解说在第00分钟位于第00阶梯,第1,2,31,2,3分钟时位于第11阶梯,之后每一分钟处在的阶梯都是前三分钟的阶梯数之和,如第44分钟位于第33阶梯,第55分钟位于第55阶梯,第66分钟位于第99阶梯,注意他只会在整数分钟才会登上更高的阶梯,比如原创 2021-10-31 15:37:41 · 443 阅读 · 0 评论 -
金币+小红的ABC+木棍游戏+空调遥控(枚举)
金币思路直接暴力加和就行,到达对应天数时停止代码#include<bits/stdc++.h>using namespace std;int main(){ int k; cin>>k; int sum=0,day=0; for(int i=1;;i++) { for(int j=1;j<=i;j++) { day++; sum+=i;原创 2022-03-09 17:27:44 · 4878 阅读 · 2 评论 -
简单任务调度(贪心)
题目有n个模型代码要写,每个模型代码都有一个写的时间和训练的时间,每次只能写一个代码,每个代码写完后就立刻训练,如何安排写代码的顺序,使得所有模型尽早的完成训练。思路将训练的时间从大到小排序,按照这个顺序执行即可思路分析如图,横向的是每个模型写代码需要的时间,纵向是从大到小排序好的每个模型训练的时间。假设第3个模型是最后训练完成的(也就是模型1+模型2+模型3的写代码时间和模型3的训练时间和最大)假如更改执行的顺序,交换模型2和3,那么前三个模型需要的时间变成了(模型1+模型2+模型3的写代原创 2022-03-08 15:49:04 · 266 阅读 · 0 评论 -
最小新数(贪心)
题目给出一个n位的十进制数字,在其中删掉k个数字(1≤k<n),剩下的数字构成一个新数(顺序不变),求这个新数最小是多少思路容易想到要使数字小,高位最小就行,于是不假思索的以为删掉数字中最大的k个就行,但如果是326,删掉最大的6得到32,并不是最小的数,所以这个题的思路还是要从使高位最小来出发,优先处理高位,可以反过来想,从保留哪个数字的角度出发,在n位的数字中,要删除k个数字,留下n-k个,那么第一个保留的数字必然出现在1~k+1的位置上,超过k+1,就不符合留下n-k个了,所以加上高位最小的思路原创 2022-03-08 00:05:26 · 213 阅读 · 0 评论 -
Haywire(模拟退火)
TSP问题旅行商问题(Traveling Salesman Problem),假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。解对于TSP问题,一个解决方案就是遍历不同的排列顺序,采用模拟退火算法,在产生新解时可以随机选取两个节点,然后交换位置(看起来还是很暴力,但是效果确实不错);需要明确的时,模拟退火算法虽然相对一些方法来说更容易跳出局部最优,但还是不能保证得到的结果原创 2022-03-02 10:49:42 · 355 阅读 · 0 评论 -
二分法和STL
为什么二分假设每次取的是最左边的一个k等分点,那么在检测之后区间大小可能变成原来的1/k或者1-1/k,假设在查找范围中的数的分布是绝对均匀的,那么区间变成1/k的概率是1/k.同样,变成1-1/k的概率为1-1/k,那么检测之后期望的区间长度为:range∗(2/k2−2k+1)range*(2/k^2-\frac{2}{k}+1)range∗(2/k2−k2+1)这是个二次函数 ,当k=2时,取最小值代码前提:数组有序这里假设为非递减数组low=1;high=n;while(low&原创 2022-02-27 20:20:39 · 114 阅读 · 0 评论 -
指纹索(set)
题目描述HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁。该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两个指纹越相似,当两个指纹的数值差≤k时,这两个指纹的持有者会被系统判定为同一个人。现在有3种操作,共m个,操作1:add x,表示为指纹锁录入一个指纹,该指纹对应的数字为x,如果系统内有一个与x相差≤k的指纹,则系统会忽略这次添加操作操作2:del x,表示删除指纹锁中的指纹x,若指纹锁中多个与x相差≤k的指纹,则全部删除,若原创 2022-02-27 16:46:08 · 171 阅读 · 0 评论 -
吐泡泡(栈)
题目描述小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)例如:ooOOoooO经过一段时间以后会变成oO。输入描述:数据有多组,处理到文件结束。每组输入包含一行仅有’O’与’o’组成的字符串。输出描述:每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。示例输入:ooOOoooO输出:oO思路感原创 2022-02-26 11:55:07 · 426 阅读 · 1 评论 -
younik要排号(set)
题目描述Younik挂好号之后,就去找医生了。但是她没想到,看医生居然也要排队!于是younik可怜兮兮地站在大厅里,盯着墙上的显示屏,显示屏会不停地打出名字,如果一个人被叫到但没进去,显示屏可能会叫他很多次。你能告诉younik她是第几个被叫到的人吗?Ps.如果一个人被叫了两次,他还是一个人,不能算两个人。(题目数据范围为200)输入描述:第一行是一个正整数n,表示显示屏会叫几次。接下来n行,每行都是一个名字。输出描述:一个正整数,表示younik是第几个被叫到的人。不需要换行。示例原创 2022-02-26 11:18:51 · 565 阅读 · 0 评论 -
拼数(string类)
题目描述设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613输入格式第一行,一个正整数n。第二行,n个正整数。输出格式一个正整数,表示最大的整数样例输入313 312 343输出34331213思路显而易见,最高位数大的数排在前边考虑用string类:string 类的设计允许程序自动处理 strin原创 2022-02-26 10:58:24 · 355 阅读 · 0 评论 -
装进肚子(贪心)
题目描述自从xxx吃完糖果后,他又开始改吃巧克力了,他每天想吃n个巧克力增加甜蜜值,他决定早上吃K个,晚上吃n-K个,每个巧克力在早上吃和在晚上吃的甜蜜值是不一样的,他想得到最大甜蜜值,并想知道最大的是多少输入描述第一行包含两个数n,K表示每天要吃的巧克力数量和要在早上吃的数量。(n <= 100000, K <= n)第二行包含n个整数Ai(1 <= i <= n) 表示个第i个巧克力在早上吃可得到的甜蜜值 (Ai <= 100000)第三行包含n个整数Bi(1 &原创 2022-02-25 16:28:24 · 306 阅读 · 0 评论 -
STL(凑字数)
万能头#include<bits/stdc++.h>STL标准库standard template libraryC++自带的函数库,包含一些可以直接使用的类或者函数,如:sort,string,vector,list,map,set,queue,priority_queue,stack,pair等template自适应类型template<class T>void swap(T &a,T&b){ T=a; a=b; b=c;}sort原创 2022-02-25 10:13:36 · 462 阅读 · 0 评论