算法
码路编
这个作者很懒,什么都没留下…
展开
-
hdu 1335
Basically SpeakingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2891 Accepted Submission(s): 1116Problem Description The Really Neato Cal原创 2016-04-22 21:34:19 · 401 阅读 · 2 评论 -
nyoj 69(阶乘位数)
数的长度 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?输入 首行输入n,表示有多少组测试数据(n<10) 随后n行每行输入一组测试数据 N( 0 < N < 1000000 ) 输出 对于每个数N,输出N!的原创 2016-04-17 22:00:41 · 493 阅读 · 3 评论 -
nyoj 67
三角形面积 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入 每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标。(坐标值都在0到10000之间) 输入0 0 0 0 0 0表示输入结束 测试数据不超过10000组 输出 输出这三个点所代表原创 2016-04-14 23:53:52 · 291 阅读 · 0 评论 -
nyoj 66
分数拆分 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y.输入 第一行输入一个整数n,代表有n组测试数据。 接下来n行每行输入一个正整数k 输出 按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合 样例输入 2 2 12 样例输出 1/2=1/6+1原创 2016-04-13 22:37:18 · 335 阅读 · 0 评论 -
nyoj 62
#include<iostream>#include <string.h>#include <math.h>using namespace std;bool is_prime(int u){ if (u == 0 || u == 1) return false; if (u == 2) return true; if (u % 2 ==原创 2016-04-11 23:11:17 · 276 阅读 · 0 评论 -
nyoj 60
#include<stdio.h>#include<string.h>struct student{ char name[22];//名字 int a;//期末平均成绩 int b;//班级评议成绩 char c;//学生干部 char d;//西部学生 int e;//论文};int main(void){ int n; in原创 2016-04-11 21:59:46 · 356 阅读 · 0 评论 -
nyoj 57
#include<iostream>#include<algorithm>//加入头文件#include<string>using namespace std;int main(){ int n, i, j, sum, s1, s2, s; int a[4]; cin >> n; while (n--) { cin >> s;原创 2016-04-11 21:58:03 · 300 阅读 · 0 评论 -
nyoj 56
题目如下:阶乘因式分解(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数。将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。输入 第一行是一个整数s(0#include<iostream>using namespace std;int main(void){ int n; cin>>n原创 2016-04-09 10:46:37 · 247 阅读 · 0 评论 -
nyoj 54
题目: 小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理。每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让小明学习如何储蓄,妈妈提出,小明可以随时把整百的钱存在她那里,到了年末她会加上20%还给小明。因此小明制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱原创 2016-04-09 00:40:56 · 340 阅读 · 0 评论 -
nyoj 48
首先我拿到这道题时,下意识的就按照题目的叙述来写了,第一步:输入,第二步:筛选,第三步:排序,第四步:输出 于是就有了代码一:原创 2016-04-06 23:58:24 · 407 阅读 · 0 评论 -
nyoj 23
/*巴什博奕(Bash Game): 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走原创 2016-04-05 22:44:29 · 323 阅读 · 0 评论 -
算法-快速排序及相关问题
快速排序及相关问题1. 快速排序基础版package com.liuyao.sort;import com.liuyao.utils.SortHelper;/** * Created By liuyao on 2018/4/13 22:09. */public class QuickSort { private QuickSort(){} private static int p原创 2018-04-30 11:31:39 · 190 阅读 · 0 评论 -
算法-并查集
并查集(Union Find) 并查集可以很高效的解决连接问题 (Connectivity Problem) 网络中节点间的连接状态 网络是个抽象的概念: 用户之间形成的网络 数学中的集合1. 实现方式一首先设置每个元素在id数组中的值就是自己,find操作就是直接返回当前元素所对应的id数组中的值,如果在同一个集合的话,那么他们的值应该相同的。合并操原创 2018-04-30 10:16:55 · 481 阅读 · 0 评论 -
算法-二叉搜索树(BST)
二叉搜索树 Binary Search Tree 高效,不仅可以查找数据;还可以高效的插入,删除数据-动态维护数据。 还可以很方便的回答很多数据之间的关系问题: min,max,floor,ceil,rank,select 二叉搜索树可以不用是完全的二叉搜索树。下面这个也是二叉搜索树:由于二叉搜索树可以不是完全的二叉树,所以用数组表示不方便,我们采用的是用 Nod原创 2018-04-30 10:16:33 · 283 阅读 · 0 评论 -
Dijkstra双栈求表达式值
该方法不能省略括号,乘除法也需要添加括号/** * Dijkstra双栈算术表达式求值算法 */public class Compute { public static void main(String[] args) { MyStack<Double> vals=new MyStack<Double>(); MyStac...原创 2018-03-29 20:50:59 · 309 阅读 · 0 评论 -
算法-快速排序及相关问题
快速排序及相关问题1. 快速排序基础版package com.liuyao.sort;import com.liuyao.utils.SortHelper;/** * Created By liuyao on 2018/4/13 22:09. */public class QuickSort { private QuickSort(){} priva...原创 2018-04-17 17:57:29 · 194 阅读 · 0 评论 -
折半查找法
代码一:折半查找法int search(long num[],int n,long x){ int mid; int low = 0; int high = n-1; while(low<=high) { mid=(low+high)/2; if(x>num[mid]) { low=mi原创 2016-04-05 00:20:17 · 360 阅读 · 0 评论 -
希尔排序
希尔排序主要是每次减少两个数之间的增量,让两个数再来进行比较。d=d/2,故包含两个函数,一个函数是将d每次减少,直到d==1,另一个函数是将增量旁边的两个数进行比较,#include<iostream>#include<stdlib.h>using namespace std;void shellInsert(int a[],int d,int n){ for(int i=d;i<n原创 2016-04-10 12:46:10 · 254 阅读 · 0 评论 -
动态规划
动态规划动态规划(Dynamic progamming)是解决多阶段决策问题常用的最优化理论。在最短路线,库存管理,资源分配,设备更新,排序,装载等问题上比较高效。动态规划的原理就是把多阶段决策过程转化为一些列的单阶段决策问题。 动态规划适合求解多阶段(状态转换)决策问题的最优解,也可用于含有线性或非线性递推关系的最优解问题,但是这些问题必须满足必须满足最优化原理和子问题的“无后向性”。最优化原创 2017-04-14 17:01:13 · 610 阅读 · 0 评论 -
阿拉伯数字与中文数字转换算法
根据《算法的乐趣》简单总结一下:中文数字的特点中文数字直接“数字+权位”的方式组成数字,比如阿拉伯数字100,中文表示为一百,其中“一”为数字,“百”为权位。常用的数字权位有“十”,“百”,“千”,“万”,“亿”等中文数字的权位和小节 中文数字的特点之一就是每个计数数字都跟着一个权位,这个权位就是数字的量值,相当于阿拉伯数字中的数位。最低位(个位)没有权位,也可以理解为权位为空 中文数字的另原创 2017-03-20 01:21:29 · 6887 阅读 · 0 评论 -
贪心算法(Greedy Algorithm)分析
根据《算法的乐趣》阅读总结:贪心算法每一步选择完后,局部最优解就确定了,不再进行回溯处理,也就是说,每一个步骤的局部最优解确定以后,就不再修改了,知道算法结束。因为不在进行回溯处理贪心算法只在很少的情况下可以得到最优解,比如最短路径问题,图的最小生成树问题贪心算法的基本设计思想有三个步骤:建立对问题精确描述的数学模型,包括定义最优解模型;将问题分解为一系列子问题,同时定义子问题的最优解结构;应原创 2017-03-19 00:50:34 · 8495 阅读 · 0 评论 -
回文串和镜像串和ctype.h
输入一个字符串,判断它是否为回文串以及镜像串,输入的字符串保证不含数字0,回文串就是反转后与原串相同,例如abba等,镜像串就是左右镜像之后与原串相同,例如2S,但并不是每个字符都在镜像后有合法的字符串与之对应。 下面就是列出镜像字符表: 相应的代码如下:#include <stdio.h>#include<string.h>#include<ctype.h>const char * rev原创 2016-05-02 18:53:19 · 2114 阅读 · 2 评论 -
算法-排序算法整理(算法第四版)
选择排序运行时间和输入无关,选择排序不善于利用数组的初始状态,故一个有序的数组或者主键全部相等的数组和一个元素随机排列的数组所用的时间是一样的。数据移动是最少的N次交换,每次交换两个元素的值,故选择排序用类N次交换,交换次数和大小和数组的大小是线性关系。每趟都可以让一个元素回到最后正确的位置//选择排序public class Selection{ // 将a按照升序排列...原创 2018-04-18 19:36:24 · 322 阅读 · 0 评论 -
算法-海量数据处理
海量数据处理1. 散列分治 对于海量数据,由于没办法将其一次性装入内存进行处理,不得不将其通过散列映射的方法分割成相应的小块数据,然后再对各个小块数据通过hash_map进行统计或其他操作。1.1 寻找 Top K 问题 提取出某日访问百度次数最多的那个IP解决问题三个步骤:分而治之/散列映射。现将该日访问的IP全部提取出来,逐个写入到一个大文件中,然...原创 2018-04-30 10:12:03 · 220 阅读 · 0 评论 -
算法-堆
堆1. 堆的基本实现堆的时间复杂度为O(NlogN),利用二叉堆实现最大堆特性:堆中的某个节点值总是不大于其父节点的值,堆总是一棵完全二叉树用数组存放二叉堆,元素从1开始存放1.1 Shift Up操作上面执行的是先插入操作:先count++,然后把插入的元素放在最后面,然后比较该元素和父节点的大小,如果比父节点大,则此时不满足堆的性质,交换,直到该元素的值比父节点的值小为止。 public vo原创 2018-04-30 10:16:07 · 431 阅读 · 0 评论 -
nyoj 34
标程:#include<iostream>using namespace std;int main(){ int a,b,c; cin>>a>>b>>c; int n=(a*70+b*21+c*15)%105; if(n>100||n<10) cout<<"No answer"<<endl; else cout<<n<<endl;}原创 2016-04-05 20:46:32 · 320 阅读 · 0 评论