int函数

「模板」替罪羊树

扶醉桌前 提交于 2020-03-14 11:15:17
目录 变量/函数の定义 代码 变量/函数の定义 变量/函数名 定义/作用 tax[] 将树拍扁时用的临时数组 tail 与 tax[] 配套使用,类似于栈顶指针 son[x][] 点 \(x\) 在树上的左/右儿子 exist[x] 点 \(x\) 存在与否, \(1\) 为存在 val[x] 点 \(x\) 的值 siz[x] 点 \(x\) 的子树一共有多少节点 fact[x] 点 \(x\) 的子树实际还存在多少节点 rt 树根 memory_pool[] 内存池 origami 记录内存池的元素个数,也用作栈顶指针 真不是折纸大师 void buildPool() 建立内存池 int Newnode() 获取一个新节点编号 void Release(x) 释放节点 \(x\) ,即重新放回内存池 void Clear(x) 将点 \(x\) 清空 void Leaf(x) 建立点 \(x\) 为叶子的信息,双儿子为 \(0\) 且子树大小为 \(1\) void Pushup(x) 顾名思义,上传操作 bool Balance(x) 返回树 \(x\) 平衡与否, \(1\) 为平衡 void Insert(x,v) 在点 \(x\) 的子树里面插入值 \(v\) void Delete(x,rnk) 在点 \(x\) 的子树里面删除排名为 \(rnk\) 的值 int

数据结构与算法之比较排序算法总结

喜欢而已 提交于 2020-03-13 14:53:32
介绍: 比较算法大致可以分为两种,一种为比较算法,另一种为非比较算法。 比较算法有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序,希尔排序。 非比较算法有:计数排序,基数排序,桶排序。 https://gitee.com/linqiankun/Utils/tree/v3.0/ 时间复杂度: 排序方法 最好情况 平均情况 最差情况 辅助空间 稳定性 冒泡排序 n n^2 n^2 1 yes 选择排序 n^2 n^2 n^2 1 no 插入排序 n n^2 n^2 1 yes 归并排序 nlogn nlogn nlogn n yes 堆排序 nlogn nlogn nlogn 1 no 快速排序 nlogn nlogn n^2 1 no 希尔排序 n^1.3 nlogn~n^2 n^2 logn~n no 比较算法: 冒泡排序 普通冒泡排序 冒泡排序是一种极为简单的排序算法。通过循环反复的遍历数组中的元素,依次比较相邻的两个元素。如果不满足排序规则,就进行位置交换,直到没有元素需要交换位置,排序完成。 这个算法会慢慢的使元素按照需要的顺序浮出来。 时间复杂度为:O(n)~O(n^2)~O(n^2) 冒泡排序运行顺序: 比较相邻元素,按照排序规则进行位置交换。 对每一对相邻元素进行第一步的操作,操作完之后,队伍最后会是满足条件的数。循环体的内层循环走完一圈。

C# 指针使用总结

拈花ヽ惹草 提交于 2020-03-13 09:37:32
C#为了类型安全,默认并不支持指针。但是也并不是说C#不支持指针,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式。在不安全模式下,我们可以直接操作内存,这样就可以使用指针了。在不安全模式下,CLR并不检测unsafe代码的安全,而是直接执行代码。unsafe代码的安全需要开发人员自行检测。 一、Vs2010中开启unsafe code 的方式 在方法、类、代码块中使用unsafe关键词,如: 1 unsafe static void Main(string[] args){ //代码} 2 3 unsafe 4 { 5 //代码块 6 } 然后再项目上点击鼠标右键,选择“属性”,在“生成”选项卡中选中“允许不安全代码” 二、C#可以定义为指针的类型有 sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, struct(结构体),结构体中只能包括非托管类型。 三、C#指针操作符 操作符 说明 * 取值运算符 & 取址运算符 -> 通过指针处理结构体中的数据(获取或赋值) ++与– 指针增、减操作 fixed 用户暂时固定托管代码中引用类型的位置。 Stackallc 分配内存 例如分配内存 1 char* cptr =

C#随机数生成

半腔热情 提交于 2020-03-13 08:17:23
private static char[] constant = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static string GenerateRandomNumber(int Length) { System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); Random rd = new Random(); for (int i = 0; i < Length; i++) { newRandom.Append(constant[rd.Next(62)]); } return newRandom.ToString(); } 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等

C# 生成随机数

隐身守侯 提交于 2020-03-13 08:17:10
private static char[] constant = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; public static string GenerateRandomNumber(int Length) { System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62); Random rd = new Random(); for (int i = 0; i < Length; i++) { newRandom.Append(constant[rd.Next(62)]); } return newRandom.ToString(); } 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等

2020计算机二级C语言题库

放肆的年华 提交于 2020-03-13 01:52:54
[解析]软件设计中模块划分应遵循的准则是高内聚低偶 合、模块大小规模适当、模块的依赖关系适当等。模块的划 分应遵循一定的要求,以保证模块划分合理,并进一步保证 以此为依据开发出的软件系统可靠性强,易于理解和维护。 模块之间的耦合应尽可能的低,模块的内聚度应尽可能的 高。 #include <stdio.h> double fun(double e) { int i, k; double s, t, x; s=0; k=1; i=2; /**********found**********/ x=3.0/4; /**********found**********/ while(x > e) { s=s+k*x; k=k* (-1); t=2*i; /**********found**********/ x=(t+1)/(t*t); i++; } return s; } main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); } #include <stdio.h> /************found************/ double fun ( int n ) { int a, b, c, k; double s; s = 0.0; a = 2; b = 1; for ( k = 1; k <= n; k+

八种排序算法效率比较

流过昼夜 提交于 2020-03-12 22:27:08
从刚上大一那会儿学的 C 语言开始,就已经接触到了不少排序 算法 ,但当时都只是为了完成简单的排序任务而已,而且所给的数据也不够多,所以看不出各个排序 算法 间的执行效率的优劣。最近有个数据结构课程设计的实验,是有关于排序 算法 之间的效率比较,我就顺便把它放上来了,并对各个算法执行的效率时间做了柱形统计图表。此次实验主要测试了8种排序算法:插入排序、快速排序、冒泡排序、希尔排序、简单选择排序、堆排序、归并排序、折半插入排序。 总共建立了三种情况,分别是平均排序、最好情况排序、最坏情况排序。第一种情况就是使用了VC6.0下的随机数生成函数输出100000个随机数进行排序;第二种情况是100000个数本身已经按从小到大的顺序排列了;第三种情况就是100000个数全部是按逆序排列。代码如下: #include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define MAX 100000 void InsSort(int r[],int length) { int i,j; for (i=2;i<=length;i++) { r[0]=r[i]; j=i-1; while(r[0]<r[j]) { r[j+1]=r[j]; j=j-1; } r[j+1]=r[0]; } } //插入排序 void

算法题-数组算法题

僤鯓⒐⒋嵵緔 提交于 2020-03-12 22:00:46
题一: 二分查找法-Java:用于 有序 数组 //实验数据 int[] arr = {3,21,34,46,55,71,74,80,97}; 代码: public int findIndex(int value, int[] arr) { // arr是有序数组 // value是目标值 int min = 0; //最大值,最小值的索引值 int max = arr.length - 1; int mid = (min + max) / 2; while (arr[mid] != value) { if (arr[mid] > value) { max = mid - 1; } else if (arr[mid] < value) { min = mid + 1; } mid = (min + max) / 2; if (min > max) return -1;//如果最小索引大于最大索引证明没有找到这个value,要退出循环 } return mid;//返回索引 } 题二 :给定一个数组,写一个函数,将数组中的0都挪到数组的末尾,而维持其他非0元素的相对位置 //实验数据 int[] nums = {0,1,0,3,12}; //排序后 nums = {1,3,12,0,0} 思路:将所有非0元素拿出来,放在按顺序放在一个数组中,然后将最后的位置全部塞进0 public

ZJOI2005 午餐

余生长醉 提交于 2020-03-12 13:51:13
题目链接 Description 一共 \(n\) 个人去打饭,每个人一个打饭时间 \(A_i\) 、吃饭时间 \(B_i\) 。要求把 \(n\) 个人分成两组,每组占领一个窗口不间断打饭,最小化所有人吃完饭时刻。 Solution 首先这是一个排列数问题,与 AcWing 734. 能量石 类似,不妨用贪心尝试将排列数问题转化为组合数问题。 贪心 我们先之考虑一队同学,尝试用微扰的方式证明一下。 假设两个人 \(i, j\) 在一队按顺序打饭,设前面人打完饭的时刻是 \(t\) ,他们对答案的贡献是: \[ \max(t + a[i] + b[i], t + a[i] + a[j] + b[j]) \] 将 \(i, j\) 颠倒顺序,他们的贡献是: \[ \max(t + a[j] + b[j], t + a[j] + a[i] + b[i]) \] 两项交换不会使答案贡献更优: \[ \max(t + a[i] + b[i], t + a[i] + a[j] + b[j]) \le \max(t + a[j] + b[j], t + a[j] + a[i] + b[i])\] 整理一下得: \[ \max(a[i] + b[i], a[i] + a[j] + b[j]) \le \max(a[j] + b[j], a[j] + a[i] + b[i])\]

PAT A1085 Perfect Sequence(***二分+STL upper_bound)

此生再无相见时 提交于 2020-03-12 13:32:54
问题链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805381845336064 题意: 从N个正整数中选择若干个数,使得选出的这些数中的最大值不超过最小值的p倍。问满足条件的选择方案中,选出的数的最大个数。 Note: p与序列中的元素均可能达到10的9次方,因此a[i]*p 可能达到10的18次方,必须使用long long进行强制类型转换。 法一:二分查找 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; int n, p; int A[100010]; //binarySearch函数在[i+1,n-1]范围内查找第一个大于x的数的位置 int binarySearch(int i, long long x){ if(A[n-1] <= x)//如果所有数都不大于x,返回n return n; int left = i + 1, right = n - 1, mid; while(left < right){ mid = (left + right) / 2; if(A[mid] <= x) left = mid + 1; else right = mid; } return left;