- 博客(37)
- 收藏
- 关注
原创 组合 __int128
原题链接:https://ac.nowcoder.com/acm/contest/1099/B这道题的关键要点有三个:1.把公式化简2.把k变大即:ll f(ll n,ll k){//k+1 k+2....n//1 2 3 ...n-k//if(k<n/2)k=n-k; __int128 ans=1; for(ll i=1; i<=n-k; i+...
2019-10-02 01:21:15
232
原创 计蒜客——忽明忽暗
首先,这是一道模拟题,但数据范围很大,1e18.所以,我们先暴力求解+打表,发现一下规律:#include<iostream>#include<cstring>#include<string>#include<cmath> #define ll long longusing namespace std;const i...
2019-09-09 18:51:43
269
1
原创 数论——求N!末尾的零
举个例子,比如10!10!=1*2*3*4*5*6*7*8*9*10;会产生两个零。为什么呢?数末尾的零,可以看成2*5,比如130=13*10=13*2*5;而10!中,只有5,和10会各自产生一个5,而且因为偶数就会产生2,比如2 4 6 8 10所以,求N!末尾的零就是求1-N会产生多少个5很容易想到N/5,但是要注意25,125这些连续5相乘产生的数,所以正确的...
2019-09-09 13:12:12
455
原创 基姆拉尔森计算公式
int Date(int y,int m,int d){ if(m==1||m==2) { m+=12; y--; } int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400)%7+1; return week;}1-7代表周一至周日。hdu 6112:挺简单的。不过wa了一发。因为最开始忘记了2月29日...
2019-08-13 15:57:41
2877
原创 分治法求数组的最大元素
#include<iostream>using namespace std;//[) 左闭右开int findMax(int a[],int l,int r){ int x; int m=l+(r-l)/2; //防止过大溢出 if(r-l==1)return a[l]; //只有一个元素 else { //分治法 int u=findMax(a,l,m...
2019-08-05 20:58:19
3084
1
原创 lower_bound 与 upper_bound
#include<iostream>#include<algorithm>using namespace std;int main(){ int a[]={0,1,2,2,2,2,5,6,7,8,8,}; //lower_bound:查找第一个大于等于 int x=lower_bound(a,a+sizeof(a)/sizeof(a[0]),2)-a; ...
2019-08-05 19:16:39
198
原创 散列搜索与关流
#define NIL 0#define ll long longconst int M=1046527;ll T[M];//记得初始化ll h1(ll key){ return key%M;}ll h2(ll key){ return 1+(key%(M-1));}ll h(ll key,ll i){ return (h1(key)+i*h2(key))%M...
2019-08-05 10:37:25
114
原创 数论--最小公倍数
记录求两个数的最小公倍数:lcm=a*b/gcd(a,b);求一组数据的最小公倍数:ll lcm(int n){ int num; for(int i=0; i<n-1; i++) { num=__gcd(s[i],s[i+1]); s[i+1]=s[i]/num*s[i+1]; } return s[n...
2019-07-22 10:18:57
450
原创 线性搜索优化——算法之美
线性搜索何为线性搜索?线性搜索是最简单的一种查找方法。比如你有一个保存了元素的数组:你需要查找某个元素 key 是否在其中,是的话位置在哪。正常人(包括我)一般情况下的写法是:int search1(int key){ for(int i=0; i<N; i++) { if(text[i]==key)return i; } return -1;}...
2019-07-19 22:54:21
1102
原创 Aizu-ALDS1_3_D——截面图上的区域
原题链接(OJ可提交):https://vjudge.net/problem/Aizu-ALDS1_3_D大意是:给定一个横截面图,如果发生洪水灾害,计算并报告哪些区域会被淹没。如图:用 \ / 和_ 来模拟地形,下面的样例输入对应上图,输出中35是水的总面积,5是有5个被淹没区域。这题的解题关键:水平面如图可知,前面几个区域还是三角形,等腰梯形之类的,但...
2019-07-19 20:02:14
659
原创 双向链表之下篇--Aizu-ALDS1_3_C
题目链接:https://vjudge.net/problem/Aizu-ALDS1_3_C题意很简单,就是让我们使用双向链表。在上篇中我们讲了双向链表的基本操作,但如果比赛要从头写,估计会吐血。我们可以用STL 里面 的 list 来使用双向链表:AC代码:#include<iostream>#include<list>using namespa...
2019-07-19 12:52:01
188
原创 双向链表之上篇
首先,我们得定义结点:双向链表需要前后两个指针,pre指向前一个元素,next指向后一个元素。结点当然要保存数据key了,当然 key 也可以换成另外一个结构体,比如学生信息之类的。初始化函数:我们定义一个里面不含实际数据的头节点,方便操作。注意这里用new而非malloc,如果键值是一个结构体,比如学生结构体,而且里面含有字符串类型,比如string name,那么如果这里申...
2019-07-19 12:20:42
162
原创 数据结构之STL队列--第三篇
这篇我们用STL里面的 queue 库来写上一篇的时间片轮转调度算法。queue 库里面主要有:①TYPE &back(); back()返回一个引用,指向队列的最后一个元素。②bool empty(); empty()函数返回真(true)如果队列为空,否则返回假(false)。③TYPE &front(); ...
2019-07-09 14:42:49
169
原创 数据结构之时间片轮转--队列第二篇
时间片轮转算法(Aizu - ALDS1_3_B:Queue)题意:There are n processes in a queue. Each process has namei and timei. The round-robin scheduling handles the processes in order. A round-robin scheduler gives ...
2019-07-09 14:06:50
867
原创 数据结构之队列--第一篇
说到队列,就经常会想起饭堂的“排队长龙”。队列,也是一种特殊的被限定的数据结构。特殊在于队列只能在队头取元素,只能在队尾进元素。实现队列需要三个元素:即①用来存放元素的数组。②两个指针。其中头指针指向队头元素(下标不一定为0哦),尾指针指向队尾元素+1的那个位置。队列有两种操作:①入队操作:即把元素放到队尾指针所指位置,而后队尾指针往下一个位置移动。(...
2019-07-08 22:24:08
204
原创 利用 STL 中的 stack
在上一篇中我们讲了如何用栈的基本构架。但在实战中,或者算法竞赛中,往往利用已经封装好的 “stack” 库来使用栈,毕竟,bug往往就产生在你觉得OK的代码之上。stack中有6中基本操作:①bool empty(); 如果当前堆栈为空,empty() 函数 返回 true 否则返回false.②void pop(); pop() 函数移除堆栈中...
2019-07-05 21:47:59
280
原创 利用栈计算逆波兰表达式
栈:一种后进先出(LIFO)的数据结构实现栈需要:数组+指向栈顶的普通变量(可以看成手指,或者是指针)数组 a 和变量 top:元素 1 准备入栈:top往前移动一位,放进去 1 :元素 2 入栈,同理:接下来,出栈,根据规则,只能是栈顶元素(即top指向元素)出栈:返回top所指元素即可,但记得要把top往后移动一位。所以栈有两个基本操作...
2019-07-05 21:10:46
630
原创 逆波兰表达式的程序计算
首先,我们得对三种表达式有一个简单了解:前缀表达式:操作符在操作数前面,又叫波兰表达式。中缀表达式:操作符在操作数之间。后缀表达式:操作符在操作数后面,又叫逆波兰表达式。为什么会有这三种表达式呢?本来,有中缀表达式形如“1+((2+3)×4)-5”就够了,很方便人们理解,但后来计算机不干了,它不理解,准确的说,我们比较难让计算机理解我们的理解。哈哈哈,有点绕。于是后...
2019-07-04 22:07:57
420
原创 不稳定的直接选择排序
选择排序:简单直观算法思想: 假设手里有10个待排序的元素,要从小到大排序。 ①找到10个元素里面最小的,把它放到第一位。 ②找到剩下9个元素里面最小的,把它放到第二位。 ③找到剩下8个元素里面最小的,把它放到第三位。 ④⑤⑥⑦⑧⑨⑩......直到整个序列有序。是不是很直观,这是...
2019-07-04 10:27:00
853
原创 冒泡排序和反序数(逆序数)
冒泡排序:O(N^2),稳定排序。最大的优点是简单易懂,看代码就能明白。#include<iostream>using namespace std;int bbsort(int a[],int N){ int sum=0; for(int i=0; i<N; i++) { for(int j=i;j>=0;j--){ if(a[j]<...
2019-07-03 21:29:27
3258
原创 插入排序图文版
算法流程:首先,想象一下手里有一副扑克牌,要从小到大排序:使用插入排序方法,我们需要三个变量:i , j , temp;i 和 j 可以看成两个手指or两个指针,i 从第二个元素开始,在算法里面一直往后跑(往右边)j 从 i 的前一个元素开始,在算法里面一直往前跑(往左边)。而temp则用来保存当前 i 对应的元素值。然后怎么排序呢?如下图:我们要做的是从...
2019-07-03 20:25:12
372
原创 从一道趣味数学题引发的数论
原题:用0~9这十个数字组成是11的倍数的最大十位数是多少。求解过程:第一反应是数位dp,接着想偷懒,暴力求解。#include<iostream>#include<algorithm>#define ll long longusing namespace std;int check(ll x){//函数用来判断是否由0-9组成 ...
2019-07-03 10:59:14
405
原创 DNA序列 UVa1368
原题链接:https://cn.vjudge.net/problem/UVA-1368大概题意:输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的Hamming距离为2(左数第1, 4个字符不同)。输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为...
2019-04-23 14:52:07
330
原创 周期串 UVA - 455
原题:A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string ”abcabcabcabc” has period 3, since ...
2019-04-18 16:55:00
203
原创 数数字(UVa1225)打表法
原题:Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequence of consecutive integers starting with 1 to N (1 < N < 10000). After that, he counts th...
2019-04-17 19:57:51
362
原创 数数字(UVa1225)
原题:Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequence of consecutive integers starting with 1 to N (1 < N < 10000). After that, he counts th...
2019-04-17 16:55:58
455
原创 分子量 UVA - 1586
原题:大概意思:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。第一种想法:不从前往后,而是从后往前地扫描字符串,然后如果发现是字母,就把字母对应的值 * 计数器给累加进sum。...
2019-04-16 14:44:33
370
1
原创 排列
问题描述: 用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。分析:先单个循环暴力破解,关键是由1-9不重不漏组成。这个地方用1-9和为45积为362880来判断就OK。代码:#include<iost...
2019-04-10 12:51:02
120
原创 开灯问题
问题描述: 有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。样例输入:7 3样例输出:1 5 6 7数据范围: k≤n≤1000分...
2019-04-09 20:47:43
339
原创 取数游戏2--牛客网
链接:https://ac.nowcoder.com/acm/problem/14701来源:牛客网题目描述给定两个长度为n的整数列A和B,每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax,则第i次取走的数的价值vi=bi⋅ax,现在希望你求出∑vi的最大值。输入描述:第一行一个数T,表示有T组数据。对于每组数据,第一行一个整数n,接下来两行分别给出A...
2019-04-05 11:22:31
1145
1
原创 近似计算
问题描述: 计算 ,直到最后一项小于10-6。关键点:1.10-6用1e-6来表示,意义是:1乘以10的负6次方。 2.最后一项的大小指的是不带符号的大小。 3.最后一项要算进去,什么意思呢。就是你前面的数都是大于10-6,而最后一个数小于10-6,也就是说,如果用while循环,要注意结束条件。代码:...
2019-04-05 00:34:27
2268
原创 三角形
问题描述: 输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。知识点:1.假设a<=b<=c,判断是否三角形只需要判断a+b>c。 2.勾股定理。分析: 第2点没什么...
2019-04-02 23:10:22
381
原创 鸡兔同笼
问题描述: 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出No answer。样例输入: 14 32样例输出: 12 2样例输入: 10 16样例输出: No answer分析: 设鸡有x只,兔有y只,则x+y=n,2x+4y...
2019-04-02 21:02:26
438
原创 求int所能表示的最大整数
在算法竞赛中,应该对常用数据类型,比如int,longlong,所能够表示的最大范围有所了解。 比如最简单的求两个数的和,输入a,b,输出a+b。但如果a和b的位数分别都超过20位应该怎么做呢? 预储备知识:你需要有一些数据在内存中的相关知识,不需要多,能看懂这张图就OK。 先上代码,再做解释:#include&...
2019-04-02 02:16:28
10260
3
原创 2.5种变量交换的方法
问题描述: 输入两个整数a和b,交换二者的值,然后输出。样例输入: 824 16样例输出: 16 824第一种:利用一个新的变量进行交换(应用最广泛) 话不多说,直接上图上代码。代码:#include<iostream>using namespace std;...
2019-03-31 22:27:20
292
原创 圆柱体的表面积
问题描述: 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。样例输入: 3.5 9样例输出: Area = 274.889分析: 圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整的公式可以写成:表面积=底面积×2+侧面积。根据几何知识,底面积=πr2,侧面积...
2019-03-31 21:30:28
3670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人