c++笔记
poinner…
只要剪汁儿剪的好
展开
-
将11~36进制转换为10进制(c++)
输入说明第一行为一个正整数N(0<N>=1000,表示待处理的数量. 第二行为N个待处理数,以空格隔开,在表示时,大写字母表示进制,小写字母表示数值(如D表示14进制,在14进制中'0'~'9'对应十进制中的0~9,'a'~'d'对应十进制的10~13)如果存在非法表达,则该组表示无效,输出-1输出说明找出数值最大的数,输出它对应的十进制数输入样例:3A21 B10 Cb结果输出3代码如下:#include <iostream> #include <原创 2021-12-11 21:59:20 · 1408 阅读 · 0 评论 -
kruskal算法
#include<iostream>#include<algorithm>using namespace std;const int N=2e5+10;int p[N];int n,m;struct edge{ int v1,v2,w;}ed[N];bool cmp(edge e1,edge e2){ return e1.w<e2.w;}int find(int x){ if(x!=p[x])p[x]=find(p[x]);原创 2021-06-05 18:05:47 · 75 阅读 · 0 评论 -
prim算法
#include<iostream>#include<cstring>using namespace std;const int N=510,INF=0x3f3f3f3f;int g[N][N];int dist[N];int n,m;bool mark[N];int prim(){ memset(dist,0x3f,sizeof dist); int res=0; for(int i=0;i<n;i++){ in原创 2021-06-05 17:33:36 · 63 阅读 · 0 评论 -
KMP。。。
KMP是字符串匹配算法,相对于暴力做法,kmp保持文本串不回溯,而将模式串回溯,文本串只需要依次枚举即可。kmp的思想是求出模式串每个位置的最长的重复的子串,(最长保证了该算法不会漏掉任何一个可以匹配的情况),并将子串的长度保存到next数组中,如果当前位置匹配失败,指向模式串的指针就会回溯到j=next[j]的位置,尝试去向后寻找可匹配的字符,如果没找到会继续回溯,此时原本的j=next[next[j]],如果还找不到就继续,直到找到或者j=0为止。例如模式串abcdabfabg 这个串里共有三个ab原创 2021-05-31 13:08:53 · 115 阅读 · 0 评论 -
acwing每日一题:AcWing 3574. 乘积数量
给定一个长度为 n 且不包含 0 的整数序列 a1,a2,…,an。请你计算以下两值:使得 al×al+1×…×ar 为负的索引对 (l,r)(l≤r) 的数量。使得 al×al+1×…×ar 为正的索引对 (l,r)(l≤r) 的数量。输入格式第一行一个整数 n。第二行包含 n 个整数 a1,…,an。输出格式共一行,输出单个空格隔开的两个整数,分别表示负的索引对数和正的索引对数。数据范围1≤n≤2×105,−109≤ai≤109,ai≠0。输入样例1:55 -3 3 -1 1原创 2021-05-27 22:25:07 · 158 阅读 · 0 评论 -
c++对线性表的简单实现
#include<iostream>using namespace std;struct array{ int data[100]; int len=0;}; void add(array *a,int x){ a->data[a->len]=x; a->len=a->len+1; cout<<"add success"<<endl; } void insert(array *a,int idx,int c){原创 2021-05-27 17:01:40 · 82 阅读 · 0 评论 -
c++对链表的简单实现
#include<iostream>using namespace std;struct Node{ int val; Node *next; Node(){ val=-1; next=nullptr; } Node(int v,Node *n){ val=v; next=n; } Node(int v){ val=v; next=nullptr; }};Node* init(){ Node *head=new Node(); return原创 2021-05-27 17:01:00 · 50 阅读 · 0 评论 -
关于is_sorted与next_permutation的使用
is_sortedis_sorted()是algorithm库的一个函数,可以用来判断一段序列是否已经排好序,默认是排序是按照升序,即如果被判断的序列(可以是数组或vector)是升序的话返回true,如果想判断是否按降序排列,可以在在该方法的最后添加一个cmp函数。next_permutaion如果想要遍历所有的方案,需要参数数组或向量已经排好序,如果目标不是有序的,需要先sort一遍。...原创 2021-04-11 19:41:23 · 140 阅读 · 0 评论 -
第几个幸运数(优先队列+mp)
题目到x星球旅行的游客都被发给一个整数,作为游客编号。x星的国王有个怪癖,他只喜欢数字3,5和7。国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。前10个幸运数字是:3 5 7 9 15 21 25 27 35 45,因而第11个幸运数字是:49小明领到了一个幸运数字 59084709587505。去领奖的时候,人家要求他准确说出这是第几个幸运数字,否则领不到奖品。请你帮小明计算一下,59084709587505是第几个幸运数字。解法一:暴力枚举#include<b原创 2021-04-10 11:26:47 · 193 阅读 · 0 评论 -
算法笔记第一天-bfs
第一天第一题:递归实现组合型枚举#include<iostream>using namespace std;const int N=30;int n,m;int a[N];bool mark[N];void dfs(int x){ if(x==m){//结束条件 for(int i=0;i<m;i++)cout<<a[i]<<" "; cout<<endl; return;原创 2021-04-01 22:32:04 · 68 阅读 · 0 评论 -
简易四则运算模版(优点:可扩展)
#include<iostream>#include<string>#include<stack>#include<unordered_map>using namespace std;stack<int>st;stack<char>op;unordered_map<char,int>pr={{'+',1},{'-',1},{'*',2},{'/',2}};void eval(){ int b=st.原创 2021-03-22 21:01:10 · 90 阅读 · 0 评论 -
树状数组的应用(小朋友排队)
题目这题乍一看感觉就是一个逆序对的问题,和树状数组好像没有什么关系,毕竟树状数组的优势就只有动态的单点修改和区间查询,但是仔细推理还是可以发现关系的(反正我是发现不了。。。),因为这个题是求逆序对,我们其实只需要找到每个小朋友在他前面比他高的和在他后面比他矮的再计算即可。所以需要两步操作:(1)枚举每个小朋友(2)分别找出在他前面比他高的和在他后面比他矮的小朋友。之后就是数学公式了。第一步没什么好想的,主要是第二步,如何找出在他前面比他高的呢,这就可以用到树状数组了,(这里想了好久,我真笨)我们原创 2021-03-17 00:19:27 · 74 阅读 · 0 评论 -
c++读入一行数据
读入一行int(只知道读入一行,不知道具体的个数时使用) int t,i=0; while(cin>>t){ a[i++]=t; if(cin.get()=='/n')break; }读入一行string(当要读入的数据中含有空格时使用) string s; getline(cin,s);...原创 2021-03-10 20:42:09 · 2494 阅读 · 1 评论 -
机器人跳跃问题
题目二分这题是一道求最小值的题,一般求最小值的题都可以考虑用二分来做(y总)根据题目可以看出无论是向上还是向下跳跃能量变化都是一样的 ,设能量为E,则每跳一层能量的变化为E=2*E-h[i],其中h[i]是每层的高度,当E<0时就可以舍弃这个高度了,因为不满足要求,当E>1e5的时候可以直接判断当前高度是符合要求的(仅仅是符合要求,不一定是最终的答案,需要继续二分来找),因为如果E>1e5,那么往后的每次跳跃E只会越来越大。所以就可以得到代码了。```cpp#include&原创 2021-03-08 18:28:12 · 85 阅读 · 0 评论 -
八皇后
1432. 棋盘挑战给定一个 N×N的棋盘,请你在上面放置 N个棋子,要求满足:每行每列都恰好有一个棋子每条对角线上都最多只能有一个棋子 1 2 3 4 5 6 -------------------------1 | | O | | | | | -------------------------2 | | | | O | | | -------------------------3 | | | |原创 2021-01-22 20:31:44 · 136 阅读 · 0 评论 -
剪绳子(二分)
这个问题的难点就在于如何确定可以剪的最大长度,可以抽象为从一段连续的值中找到一个需要的值,因为绳子的长度是浮点数,所以用穷举法肯定是不行的,所以这题应该用二分法来考虑。#include<iostream>using namespace std;const int N=1e5;int a[N];int n,m;bool check(double len){ int ans=0; for(int i=0;i<n;i++){ ans+=a[i]/len原创 2021-01-17 17:09:02 · 274 阅读 · 1 评论 -
排序算法
1、冒泡法#include<iostream>using namespace std;int main(){ int n; cin>>n; int *an=new int[n]; for(int i=0;i<n;i++)cin>>an[i]; for(int i=n-1;i>=0;i--){ int flag=1;//如果在一次循环中没有发生交换则直接退出 for(int j=0;j<i;j++){ if(an[j]>.原创 2020-12-20 16:41:38 · 111 阅读 · 1 评论 -
判断一个数是不是素数的方法(C/C++)
int is_prime(int n){ if(n<=1)return 0; int m=float(sqrt(n)+0.5);//避免浮点误差 for(int i=2;i<=m;i++)if(n%i==0)return 0; return 1; }原创 2020-12-19 16:55:54 · 289 阅读 · 1 评论 -
c++分数化小数
#include<iostream>#include<cstdio>using namespace std;int main(){ int count=1; int a,b,c; while(cin>>a>>b>>c){ cout<<"case"<<count++<<":"<<a/b<<"."; a%=b; while(c--){ a*=10; int原创 2020-12-18 19:49:06 · 654 阅读 · 1 评论 -
c++对AVL树的简单实现
#include<iostream>#include<queue>using namespace std;typedef class poinner* on;class poinner{//AVL树定义 public: int val; on left,right; poinner():val(0),left(nullptr),right(nullptr){} poinner(int val):val(val),left(nullptr),right(nullptr原创 2020-12-10 13:58:15 · 152 阅读 · 0 评论 -
c++对堆的简单实现
#include<iostream>using namespace std;typedef class poinner* on;class poinner{ public: int size;//当前尺寸 int capacity;//容量 int* poin;//数组指针 };on create(int Maxsize){//初始化 on h=new poinner(); h->size=0; h->capacity=Maxsize; h-&g原创 2020-12-09 11:50:18 · 179 阅读 · 0 评论 -
利用栈实现进制转换(c++)
将十进制转换为八进制#include<iostream>#include<stack>using namespace std;int main(){ stack<int> p; int x; cout<<"请输入一个十进制的数字:"; cin>>x; while(x){ p.push(x%8); x/=8; } cout<<"该数字的八进制为:"; while(!p.empty()){ cout<原创 2020-11-30 19:16:59 · 561 阅读 · 1 评论 -
c++int转换为string
#include<iostream>#include<string>#include<typeinfo>#include<sstream>using namespace std;int main(){ int x; cin>>x; stringstream st; st<<x; string s=st.str(); if(typeid(s)==typeid(string))cout<<"scuess";原创 2020-11-24 19:08:54 · 156 阅读 · 0 评论