算法刷题(C++)
记录一下刷的算法
远赴山河万里
书写是对思维的缓存。
展开
-
C/C++算法练习目录
文章目录P1706 全排列问题P1706 全排列问题题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;int a[10],n,vis[10],ans[10];void pr(){ for(int i=1;i<=n;i++) cout<<setw(5)<<ans[i]; cout<<endl;}void dfs(int x,int step)原创 2021-03-30 22:44:18 · 591 阅读 · 0 评论 -
分解方案——2019蓝桥国赛T2
2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种?注意:分解方案不考虑顺序,如2+2017=2019和2017+2=2019属于同一种方案。原创 2021-06-03 23:45:47 · 181 阅读 · 0 评论 -
01背包问题——优化在于利用当前持有信息
题目链接:传送门(点我)好久没刷算法了,练下手速#include<bits/stdc++.h>using namespace std;#define MAXN 1100int N,V;int v[MAXN],w[MAXN];int dp[MAXN][MAXN];/* dp[i][j] 前i个物品 容量为j 价值dp[i][j] 转移过程 dp[i][j]=max(dp[i-1][j-v[i]],dp[i-1][j]); 边界:dp[0][0]=0;*/原创 2021-06-03 21:50:16 · 70 阅读 · 0 评论 -
蓝桥2020国赛——E.玩具蛇
DFS模板#include<bits/stdc++.h>using namespace std;#define MAXN 10int mp[MAXN][MAXN],vis[MAXN][MAXN];int res;int xx[4]={1,-1,0,0},yy[4]={0,0,-1,1};struct node{ int x,y; int step;};void dfs(node n){ vis[n.x][n.y]=1; if(n.ste..原创 2021-06-01 19:37:48 · 106 阅读 · 0 评论 -
一步之遥——扩展欧几里得
一步之遥从昏迷中醒来,小明发现自己被关在X星球的废矿车里。矿车停在平直的废弃的轨道上。他的面前是两个按钮,分别写着“F”和“B”。小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。按F,会前进97米。按B会后退127米。透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。或许,通过多次操作F和B可以办到。矿车上的动力已经不太足,黄色的警示灯在默默闪烁…每次进行 F 或 B 操作都会消耗一定的能量。小明飞快地计算原创 2021-05-18 17:01:08 · 88 阅读 · 0 评论 -
试题 历届试题 Excel地址
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;int n;vector<int>ans;int main(){ cin>>n; do{ ans.push_back((n-1)%26); n=(n-1)/26; }while(n); reverse(ans.begin(),ans.end()); for(int i=0;i&原创 2021-04-17 21:28:42 · 61 阅读 · 0 评论 -
1238. 日志统计
题目链接:传送门(点我)思路:我们维护一个cnt,表示在区间内的点赞数,对区间内的cnt做统计即可。AC代码#include<bits/stdc++.h>#define IOS ios::sync_with_stdio(false),cin.tie(0)#define MAXN 100010using namespace std;int n,d,k;typedef struct lg{ int ts; int id;}lg;lg lgs[MAXN];原创 2021-04-17 20:08:27 · 107 阅读 · 0 评论 -
明码——进制转换
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0 16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 3.原创 2021-04-14 17:06:24 · 497 阅读 · 0 评论 -
后缀表达式转换总结
中缀转后缀1.维护一个符号栈2.对于数字,直接加入结果ans3.对于左括号,直到遇到右括号,把括号中间的数字全部添加到结果ans4.大于栈顶元素则push,小于则pop。(大进小出)5.弹出栈中其他符号由于没有对数字相连进行处理,只能处理单个数组的情况int pr(char o)//传入操作符,返回优先级{ int pri[10]={0,0,1,1,2,2,3};//priority char op[10]={'#','(','+','-','*','/','^'};原创 2021-04-14 15:37:27 · 678 阅读 · 0 评论 -
等差素数列——暴力搜索
2017 蓝桥第二题#include<bits/stdc++.h>using namespace std;#define MAXN 60000int is_prime[MAXN],ans;void sieve(){ memset(is_prime,-1,sizeof(is_prime)); for(int i=2;i*i<=MAXN;i++) for(int j=i*i;j<=MAXN;j+=i) if(is_pr原创 2021-04-14 11:08:33 · 60 阅读 · 0 评论 -
2021蓝桥模拟赛
1#include<bits/stdc++.h>using namespace std;int cnt;int is_prime(int n){ if(n==1)return 0; for(int i=2;i*i<=n;i++){ if(n%i==0)return 0; } return 1;}int main(){ for(int i=1900;i<=2020;i++) if(is_pr原创 2021-04-13 16:35:45 · 172 阅读 · 0 评论 -
组合数——逆元
题目链接:传送门(点我)#include<iostream>using namespace std;typedef unsigned long long ll;int n , m , p;ll calc(int a , int b){ ll ans = 1; for(int i = a ;i <= b ; i ++)ans = (ans * i) % p; return ans;}ll ny(ll num){ int a = num , b = p - 2;原创 2021-04-13 16:27:49 · 117 阅读 · 0 评论 -
试题 算法提高 字符串匹配
题目链接:传送门(点我)分析:暴力模拟即可#include<bits/stdc++.h>using namespace std;//thinking: Just Brute Forcestring s,sub;int flag,n;int equal_str(char a,char b){ if(flag)return a==b; return tolower(a)==tolower(b);}int BF(string str,string subs)原创 2021-04-10 15:31:15 · 88 阅读 · 0 评论 -
P1102 A-B 数对
题目链接:传送门(点我)先统计A,因为当前A可能作为另外一组的B,然后统计B的次数即可。AC代码#include<bits/stdc++.h>using namespace std;#define MAXN 200010typedef long long ll;ll n,c,ans;ll a[MAXN];map<ll,ll>mp;int main(){ cin>>n>>c; for(int i=0;i<n;i原创 2021-04-10 10:09:58 · 63 阅读 · 0 评论 -
常用代码模板
最大公约数ps:0与一个数的最大公约数是这个数本身,0不能与0求最大公约数。int gcd(int a,int b){return b?a:gcd(b,a%b);}快速幂原创 2021-04-09 23:23:01 · 226 阅读 · 0 评论 -
[USACO08FEB]Meteor Shower S
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;#define MAXN 500int m,x,y,ti;int mp[MAXN][MAXN],vis[MAXN][MAXN];int xx[5]={0,1,-1,0,0},yy[5]={0,0,0,1,-1};struct pos{ int x,y,step;};queue<pos>q;int main(){ memset(mp,原创 2021-04-09 23:06:50 · 53 阅读 · 0 评论 -
P1141 01迷宫——广搜/并查集
题目链接:传送门(点我)方法一:广搜分析:这题数据范围有点大,朴素广搜肯定不行。但用广搜仍然能做。首先我们对于能打通的一大块进行染色(编号),脑补扫雷的画面。然后对每个连通块进行个数统计即可。AC代码#include<bits/stdc++.h>using namespace std;#define MAXN 1010int n,m,color=1;int xx[4]={1,-1,0,0},yy[4]={0,0,-1,1};char mp[MAXN][MAXN];原创 2021-04-08 15:50:33 · 178 阅读 · 1 评论 -
P1135 奇怪的电梯
题目链接:传送门(点我)以此状态广搜,生成解答树,向上或者向下后生成新的状态,基本上就是广搜模板。#include<bits/stdc++.h>using namespace std;#define MAXN 210int n;int dir[2]={1,-1},k[MAXN];bool vis[MAXN];struct pos{ int f;//floor int step;}st,en;//start endqueue<pos>q;i原创 2021-04-07 22:41:25 · 69 阅读 · 0 评论 -
P1443 马的遍历
题目链接:传送门(点我)分析:基本上就是广搜模板,搜的方向换成八个跳跃的可能即可AC代码#include<bits/stdc++.h>using namespace std;#define MAXN 410int xx[8]={1,1,2,2,-1,-1,-2,-2},yy[8]={2,-2,1,-1,2,-2,1,-1};int mp[MAXN][MAXN];int n,m;struct pos{ int x,y,step;}st;//startqueue&原创 2021-04-07 22:15:13 · 56 阅读 · 0 评论 -
等差数列
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;#define MAXN 100010int n,d;int a[MAXN];int gcd(int a,int b){return b?gcd(b,a%b):a;}int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); f原创 2021-04-07 19:37:36 · 100 阅读 · 0 评论 -
对数的基本操作
数位分离描述:将一个数的每一位上的数字分离出来 最大公约数辗转相除法的科普:传送门(点我)gcd(a,b)={ab=0gcd(b,a%b)b≠0gcd(a,b)=\begin{cases}a & b=0 \\gcd(b,a \% b) & b\neq 0\end{cases}gcd(a,b)={agcd(b,a%b)b=0b=0gcd(a,b) = gcd(b,a%b)设d为a和b的公约数则 a/b的余数r=a-b*k(k为整数)由于a,b都为原创 2021-04-07 19:16:20 · 221 阅读 · 0 评论 -
多个数的最大公约数和最小公倍数
原创 2021-04-07 19:12:15 · 88 阅读 · 0 评论 -
P1093 [NOIP2007 普及组] 奖学金
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;typedef struct{ int se;//serial int ch;//china int all;//sum number}node;node a[500];int n,b,c;bool cmp(const node &a,const node &b){ if(a.all==b.all){ if(a.ch==b.ch)retur原创 2021-04-07 18:40:22 · 148 阅读 · 0 评论 -
递增三元组——详细解释
题目链接:传送门(点我)前置知识:计数原理 传送门(点我)分析:1.对三个数组排序开始枚举b数组中元素2.找出A数组中小于b[i]的个数num13.找出C数组中大于b[i]的个数num2根据乘法原理:answer=num1*num2#include<bits/stdc++.h>using namespace std; #define MAXN 100010typedef long long ll;ll a[MAXN],b[MAXN],c[MAXN];ll n,a原创 2021-04-07 18:23:54 · 1360 阅读 · 0 评论 -
输出
慢慢学,慢慢更新小数点四舍五入 传送门(点我)原创 2021-04-07 08:56:16 · 74 阅读 · 0 评论 -
试题 算法提高 分割项链 ——详细解释
题目链接:传送门(点我)找一个强盗小于2/total的所有情况中最大的即可。l,r模拟的是一把尺子的两头,尺子中间的值始终满足 小于2/total关于状态重复对于状态重复,就是搜多少遍停我没有想到好的方法,直接循环N遍,开始想的是使用字符串记录每个局面的状态,一旦重复则停止搜索,但这样每次生成id似乎更费时。关于边界是否取等号while(cnt<total/2)cnt+=a[r%n],r++;while(cnt>total/2)cnt-=a[l%n],l++;因为原创 2021-04-06 23:32:38 · 479 阅读 · 3 评论 -
常用省时函数
慢慢学,慢慢更新。next_permutation(begin,end)官方文档 传送门(点我)begin 和end为左闭右开。发现STL基本上都是左闭右开的设计。STL 中的,可以传迭代器对象,功能如名,下一个序列。按字典序,如果存在下一个序列,则返回true,否则返回false。nth_element博客讲解 传送门(点我)lower_bound博客讲解 传送门(点我)priority queue的使用博客讲解 传送门(点我)...原创 2021-04-06 22:24:46 · 157 阅读 · 0 评论 -
试题 历届试题 分考场——图解+详细分析
题目链接:传送门(点我)分析:可否贪心,不可,如果枚举每个人,如果发现一个队伍里面和他不认识就放进去,可否是最优解?不一定。也许放后面情况更优?对于这种关系不好理清,我选择枚举。其实DFS就是一种层数不定的枚举。搜索就是产生解答树的过程,而回溯是回溯当前改变的状态。也就是回到改变之前的状态 可以参考我这个题的题解。传送门(点我)那么如果枚举的话,对于一个人,他可能有几种状态。加入某个房间自己新开一个房间于是解答树应该按照这种逻辑展开设计dfs函数时,每一层dfs就是一种状态,而全原创 2021-04-06 21:57:21 · 116 阅读 · 0 评论 -
最长上升子序列
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;#define MAXN 1010int dp[MAXN];//dp[i] :以a[i]结尾的序列长度int a[MAXN],n,ans;int main(){ cin>>n; for(int i=1;i<=n;i++){cin>>a[i];dp[i]=1;} for(int i=1;i<=n;i++)原创 2021-04-04 17:20:11 · 55 阅读 · 0 评论 -
奇怪的数列
题目链接:传送门(点我)模拟即可#include<bits/stdc++.h>using namespace std;int cnt[20],n;string s,ans;string tostring(int n){ stringstream ss; ss<<n; return ss.str();}string sum(int i,int j,string in){ memset(cnt,0,sizeof(cnt));原创 2021-04-04 15:12:45 · 250 阅读 · 0 评论 -
算法调试
Tips:本人非竞赛选手,纯属娱乐,作为个人笔记,如有错误,恳请指出。单元测试写完每一个模块,一定要先调试通过之后再进行下一步代码编写。1.初始化完毕之后,一定要进行检查,看输入输出是否符合心中预期,往往有时候因为初始化问题导致再考虑其他逻辑问题而半天找不出错误!。搜索调试来自:李思洋《 NOIP复习资料》当BFS出现问题时,可考虑输出一层节点信息进行查看。...原创 2021-04-04 13:01:45 · 301 阅读 · 2 评论 -
试题 历届试题 九宫重排(图解+分析)BFS
题目链接:传送门(点我)分析:以每一种状态作为节点进行搜索。struct status{ int x,y,step; //x,y为当前空白格的坐标,step为空白格走的步数 char mp[5][5]; //存储当前状态地图}AC代码#include<bits/stdc++.h>using namespace std;int xx[4]={1,-1,0,0},yy[4]={0,0,1,-1},ans=-1;string tar;//target stat原创 2021-04-04 12:42:25 · 151 阅读 · 0 评论 -
初始化小结
文章目录memsetmemcpymemsetvoid *memset(void *s, int ch, size_t n);函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法需要注意的是:memset是对字节操作#include<bits/stdc++.h>using namespace std;原创 2021-04-04 12:03:37 · 97 阅读 · 0 评论 -
P1449 后缀表达式
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;typedef long long ll;/*思路:读到运算符就把栈顶上两个数做运算,然后弹出栈顶两个元素 再将结果压入栈顶*/char op[4]={'+','-','*','/'};string in;stack<int>s;ll m,n,now;int find(char o){ for(int i=0;i<4;i++) if(o=原创 2021-04-04 00:06:27 · 190 阅读 · 0 评论 -
P1175 表达式的转换
题目链接:传送门(点我)#include<bits/stdc++.h>using namespace std;stack<char>s;int t[5000],cnt;string in,out="";int pri[10]={-1,0,1,1,2,2,3};//左括号加减乘除 优先级 char op[10]={'#','(','+','-','*','/','^'};int find(char o){ for(int i=2;i<=6;i++) i原创 2021-04-03 23:14:42 · 149 阅读 · 0 评论 -
Unique-paths
题目链接:传送门(点我)分析:从终点位置开始看,到达终点只有两种可能 从上或者左过来#include<bits/stdc++.h>using namespace std;int m,n;int uniquePaths(int m, int n) { int dp[120][120]; memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++)dp[i][1]=1; for(in原创 2021-04-03 23:03:24 · 58 阅读 · 0 评论 -
Three-steps-problem
题目链接: 传送门(点我)分析:把问题规模缩小,对于达到最后的终点 i,它只可能是从 i -1, i-2,i-3 的台阶上跳上来(并不关心如何跳),如此思考,当问题规模缩小,当i=4时,便找到了边界条件。明确dp含义:dp[i]表示 跳到第i+1级台阶的方法数。当问题规模小时,在草稿纸上找出边界条件:dp[0]= 1,dp[1]=2,dp[2]=4同时发现,每次的结果只与他的前三项有关,其它无关数据不需要保存。#include<bits/stdc++.h>using namesp原创 2021-04-03 23:02:36 · 86 阅读 · 0 评论 -
进制转换
#include<bits/stdc++.h>using namespace std;//2-36进制转为 10进制 int Atoi(string s,int radix) //s是给定的radix进制字符串{ int ans=0; for(int i=0;i<s.size();i++) { char t=s[i]; if(t>='0'&&t<='9') ans=ans*radix+t-'0'; else ans=ans*ra原创 2021-04-03 22:52:42 · 67 阅读 · 0 评论 -
【入门篇】高精度
从最简单的说起从小学开始,我们便开始学习加减乘除,从那一刻起,10进制的观点开始根深蒂固。而事物的数量本身是没有进制的,无论用什么进制来表示物质的数量,物质本身不变。进制是我们用来计数的方式。我们为什么对十进制这么熟悉?(有时候我不禁想,古代那么多文明,为何大多数文明不约而同的选择了原创 2021-04-03 22:49:12 · 638 阅读 · 0 评论 -
试题 算法提高 学霸的迷宫
题目链接:传送门(点我)思路:维护一个前驱表,也可以在每个节点上维护路径AC代码#include<bits/stdc++.h>using namespace std;int n,m;char mp[550][550];string dir="DLRU";//!min_direction:DLRUint xx[4]={1,0,0,-1},yy[4]={0,-1,1,0},pre[550][550];struct pos{ int x,y,step;}st,en;原创 2021-04-03 21:43:47 · 79 阅读 · 0 评论