- 博客(35)
- 收藏
- 关注
原创 两种基础hash
数字哈希模拟散列表1.拉链法#include<iostream>#include<memory.h>using namespace std;const int N = 1e5 + 3;//大于1e5的最小质数int haxi[N]; int val[N], ne[N], idx;//拉链(链表)void insert(int x){ int k = (x % N + N) % N; //将负数haxi为正数 //haxi[k]表示下标k的头结点 v.
2022-02-21 22:10:49
292
原创 简单堆排序
#include<iostream>using namespace std;const int N = 1e5 + 10;int n, m;int heap[N]; //堆int large; //堆大小void down(int k) //若k结点变大了,则做下降调整{ int t = k; if (2 * k <= large&&heap[2 * k]<heap[t])t = 2 * k; if (2 * k + 1 &...
2022-02-17 21:20:13
297
原创 关于高精度
1.高精度加法将数(长度1e6)倒叙存入vector中(方便进位运算)#include<iostream>#include<vector>#include<string>using namespace std;vector<int> add(vector<int> &a, vector<int> &b){ vector<int> c; int temp = 0; for (int i
2022-02-07 10:44:11
157
原创 关于整数二分 浮点二分
1.整数二分二分思想即对有单调性(有些可以不单调)的数列经过有限次二分,找到左右两部分的边界例如 求上述数列 ‘4’ 第一次、最后一次出现的下标,就要分别用到二分_R、二分_Lint check(int x){ //x是否在目标区间 //}int bin_search_R(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid))r = mid; else
2022-02-06 12:50:39
387
原创 关于几个排序(C++)
1.快速排序#include<iostream>using namespace std;const int N = 1e6 + 10;int arr[N];void quick_sort(int l, int r, int arr[])//快速排序{ if (l >= r)return; int x = arr[l + r >> 1], i = l - 1, j = r + 1; while (i < j) { do i++; while (a
2021-12-03 20:16:14
1210
原创 POJ 3299 Humidex
这题靠仔细就可ac#include<iostream>#include<cstdio>#include<string>#include<memory>#include<algorithm>#include<iomanip>#include<cstring>#include<math.h>using namespace std;char a, b;double x = 0, y = 0.
2021-11-18 21:17:03
651
原创 POJ 2159 Ancient Cipher
大意:一串全为大写字母的字符串,通过字符一一按照固定长度映射,再按一定顺序排列进行加密。判断第一串是否由第二串加密得来思路:既然字符是乱序,无需考虑顺序,统计出现次数,排序即可#include<iostream>#include<cstdio>#include<string>#include<memory>#include<algorithm>#include<iomanip>#include<cstrin.
2021-11-18 21:15:42
103
原创 POJ 2739 Sum of Consecutive Prime Numbers
DescriptionSome positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representations does a given positive integer have? For example, the integer 53 has two representations 5 + 7 + 11 + 13 + 17 and 53. The
2021-11-18 21:09:34
182
原创 先中求后序 建立二叉树
class TNode{public: char data; TNode* left, *right; TNode() :left(0), right(0){}};// 先中 转后序TNode* preintopost(char *pre, char *in, int len){ if (len <= 0)return NULL; TNode *N = new TNode(); N->data = pre[1]; int i = 1; for (; pre...
2021-10-18 21:44:49
82
原创 二叉树的基本操作
const int maxn = (int)1e3 + 5;template<class T>class Myque{private: T data[maxn]; int f, r;public: Myque() :f(0), r(0){} bool empty(){ return f == r; } T front(){ return data[f]; } void pop(){ f = (f + 1) % maxn; } void push(T t){ data[r.
2021-10-15 10:54:56
112
原创 中缀表达式转后缀表达式
// 1.利用map将不同字符串按其优先顺序映射为不同等级「并且保证“(”为最低等级」//// 如:map<string> M;//// M[“+”]=1;M[“*”]=2;// 2.遇到“”,入栈// 3.遇到“”,循环输出栈元素,直到遇到“”,并将“”出栈(但不输出)// 4.遇到digit,输出// 5.遇到运算符,循环输出栈中>=此运算符的元素// 6.读取结束后,将栈清空(输出)#include <iostream>#include <a.
2021-10-12 15:57:00
130
原创 KMP(next)模板
为方便计算,统一从下标1开始。class mystring{public: char ch[maxsize]; int length;};void get_next(char *nextt,mystring &T){ int i = 1, j = 0; nextt[1] = 0; //初始化 while (i < T.length) { if (j == 0 || T.ch[i] == T.ch[j]) { i++, j++; nextt[i] = j
2021-10-11 18:33:29
103
原创 UVA-839 Not so Mobile
#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>#include <queue>#include <sstream>#define Status int#define OK 1#define ERROR 0using namespace std;Status Judge(int.
2021-09-06 09:10:21
84
原创 UVA-548 Tree
1.递归构造树通过找该树的后序遍历数组的末位来确定根节点,然后再暴力搜寻根节点在中序遍历数组中的位置,根节点以左的就是这棵树的左子树,根节点以右的就是这棵树的右子树,再以这两棵子树的后序遍历数组和中序遍历数组向下递归,如此反复2.DFS深度搜索树#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>#in.
2021-09-05 19:12:48
76
原创 UVA-122 Trees on the level
思路(反思):1. 读取串 拆分创建树(最后别忘记释放内存(我偷懒了))2. 利用队列 实现树的层序遍历:根进队 队为空退出 否则出队 输出data域 并将出对元素的左右结点(如果有)依次入队3. 两种情况为 "not complete" 其一 树的某结点(未被赋值)为空 其二 某结点被多次赋值(不论是否相等)4. 注意输出格式 最后一个结点数据后无空格#include <iostream>#include <algorithm>#include <s
2021-09-05 13:36:12
107
原创 UVA-679 Dropping Balls
思路:1.只要确定在该子树中的小球下落次序 就可以确定小球往左走还是往右走2.第I个落下的小球 若为奇数 则往左走 且相对于左子树的下落次序为(I+1)/2若为偶数 则往右走 且相对于右子树的下落次序为I/2#include <iostream>using namespace std;int main() { int T=0; cin>>T; T++; while(T--) { int D=0,I=0;
2021-09-02 09:08:50
172
原创 UVA-12657 Boxes in a Line
思路:1.计算过大的数时 一定要注意溢出 此题longlong即可2.交换两个相邻的数时 容易出错 要分开讨论3.reverse时 其实不需要很实在地去反转(反转超时!) 用一个f记号表示状态即可 但是要注意reverse前后order1和order2操作是相反的#include<iostream>#include<stack>#include<queue>#include<map>#include<memory.h>...
2021-09-01 22:26:28
125
转载 UVA-11988 Broken Keyboard
思路:这题开始我自己创建单链表 超时 啧啧啧 可能是我太菜了 参考了笔者的答案(不愧是大牛)他使用的静态链表 轻松解决 就是代码有点难读#include<iostream>#include<stack>#include<queue>#include<map>#include<memory.h>#include<cstdlib>#include<cstdio>#include<algorith..
2021-09-01 20:05:25
113
原创 UVA-442 Matrix Chain Multiplication
#include<iostream>#include<stack>#include<queue>#include<map>#include<memory.h>#include<cstdlib>#include<cstdio>#include<algorithm>#include<iomanip>#include<string>#include<string.h&.
2021-08-31 18:34:42
97
原创 UVA-514 Rails
#include<iostream>#include<stack>#include<queue>#include<map>#include<memory.h>#include<cstdlib>#include<cstdio>#include<algorithm>#include<iomanip>using namespace std;const int maxn = 1010;.
2021-08-31 18:28:13
92
原创 C++ 常用读取字符串方法
string str; cin >> str; // 遇空格结束 // >> abc def // << abc //cin.get() 读取一个字符 char ch; cin.get(ch);// >c 或ch=cin.get(); cout << ch; // <c //cin.get( , ) char arr[20]; cin.get(arr, 10);//(老版串,可读取的最大字符个数(空..
2021-08-25 22:51:26
3653
1
原创 UVA-230 Borrowers
思路:本题最需要注意的一个问题是 迭代器删除时 会失效规避方法for (vector<int>::iterator i = vector.begin();i != vector.end();i++) // 这里报错 { .... i = vector.erase(i); .... }代码:#include<iostream>#include<algorithm>#include<cmath>#i...
2021-08-24 18:19:16
118
原创 UVA-12100 Printer Queue
思路:利用表示优先级的倒叙数组 和 含有优先级和编号的队列解决代码:#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>#include<string>#include<cassert>#include<cctype>#include<memory.h>#include<cstdio>.
2021-08-24 15:33:58
120
原创 UVA-1595 Symmetry
代码:#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>#include<string>#include<cassert>#include<cctype>#include<memory.h>#include<cstdio>#include<sstream>#include<
2021-08-24 11:23:06
117
原创 UVA-10391 Compound Words
工具:// string::substr string str="We think in generalities, but we live in details."; string str2 = str.substr (3,5); // "think" size_t pos = str.find("live"); // "live" 的位置(下标)pos->‘l’ string str3 = str.substr(pos); // 从下标p.
2021-08-24 10:54:07
83
原创 UVA-10763 Foreign Exchange
这道题 利用set的优势 可以快速解决#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>#include<string>#include<cassert>#include<cctype>#include<memory.h>#include<cstdio>#include<sstrea.
2021-08-24 07:12:24
131
原创 UVA-10935 Throwing cards away I
#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>#include<string>#include<cassert>#include<cctype>#include<memory.h>#include<cstdio>#include<sstream>#include<vect.
2021-08-23 23:19:17
222
原创 UVA-1594 Ducci Sequence
#include<iostream>#include<algorithm>#include<cmath>#include<iomanip>#include<string>#include<cassert>#include<cctype>#include<memory.h>#include<cstdio>#include<sstream>#include<vect.
2021-08-23 22:07:10
125
原创 UVA-1593 Alignment of Code
Knowledge:stringstream stringstream ssm; string t; ssm << "adf"; //输入字符串流 ssm << "123"; cout << ssm.str(); //adf123 ssm.clear(); getline(cin, t); //abc 123 \\666 jjjjj ssm << t; while (ssm >> t) //字符串流拆分.
2021-08-23 21:46:59
88
原创 UVA-1592 Database
map::countmap<char,int> mymap; char c; mymap ['a']=101; c='a'; mymap.count(c) //存在'a'的某个映射返回 1 c='b'; mymap.count(c) //不存在'b'的某个映射返回 0getline (string) string a, b; getline(cin,a,'*'); //遇到指定字符停止 getline(cin,b,'*');
2021-08-23 18:11:31
89
原创 UVA-400 Unix ls
Knowledge:格式化输出cout<<setw(5)<<setfill('0')<<a<<b;//输出5位,右对齐,不足补0 //setw(int n)只是对直接跟在<<后的输出数据起作用,而在之后的<<需要在之前再一次使用setw//setfill(char x)//dec 以十进制形式输出整数 常用//hex 以十六进制形式输出整数//oct 以八进制形式输出整数//fixed
2021-08-23 10:32:32
93
原创 UVA-136 Ugly Numbers
丑数 就是只能被2、3、5整除 不能被其他素数整除的数从小到大排列有:1,2,3,4,5,6,8,9,10,12,15......求第1500个丑数。分析最简单(笨)的方法 1到无穷大遍历 符合条件的存入数组中 不过这样暴力太麻烦其中有个比较简单的方法 可以想象 这些数都是可以被2、3、5整除 所以 丑数都是由2、3、5与较小的丑数相乘而来,因此 除了1 我们取最小的丑数2 3 5 为基准 其他丑数 一定是2x||3x||5x 从小到大 巧妙利用STL容器set 存储一定范围内的丑数 .
2021-08-22 21:48:34
128
原创 3.2 队列
3.2.1 队列的定义//此处 牺牲一个位置 来区分队列的 判空 和 满列bool QueueFull(SqQueue &Q)//队满{ return (Q.rear + 1) % MaxSize == Q.front;}3.2.2 顺序队列1)定义#define MaxSize 10 //定义 队列 元素最大数typedef struct SqQueue{ int data[MaxSize]; int front, rear; //队列 头...
2021-08-11 18:27:33
74
原创 3.1 栈
3.1.1 栈的定义3.1.2 栈的顺序存储1)顺栈 定义#define MaxSize 10 //定义 栈 元素最大数typedef struct Stack{ int data[MaxSize]; //静态数组 存放元素 int top; //栈顶下表(指针)}SqStack;2)栈的初始化void InitStack(SqStack &S) //初始化栈 { S.top = -1; }3)栈的判空bool Empty(Sq...
2021-08-09 21:23:48
97
原创 2.3 线性表的链式表示
2.3.1 单链表的定义typedef struct //定义 单链表节点 类型:结构体{ int data; //数据域 struct LNode *next; //指针域}LNode,*LinkList; //LNode:强调节点 LinkList:强调链表链表又分为 有头节点,无头结点 头指针始终指向链表第一个节点无头结点:(无头结点 写代.
2021-08-06 12:32:07
494
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人