
部分ACM算法题解
花果山总钻风
这个作者很懒,什么都没留下…
展开
-
快速排序 C++实现
#include#include#includeusing namespace std;void QuickSort(int *A,int low,int high){ int i=low,j=high; if(i<j) { int t=A[low]; while(i<j) {原创 2013-09-23 11:38:12 · 531 阅读 · 0 评论 -
华为OJ 购物结算系统
主要是读题比较复杂用到了函数指针,运算符重载,结构体#include#include#include#include#include#define MAX_NUM 0xfffffffusing namespace std;typedef struct { int goodID; int goodNums;} Good;bool operator == (Good原创 2014-04-03 11:04:34 · 1768 阅读 · 0 评论 -
华为OJ 合唱队 最长递增子序列,最长
#include#include#include#define MAX 200using namespace std;int main(){ //freopen("data.txt","r",stdin); int dpUP[MAX],dpDown[MAX],num[MAX],n; cin>>n; for(int i=0;i<n;i++) { cin>>num[i];原创 2014-04-01 17:07:36 · 1873 阅读 · 0 评论 -
华为OJ IP地址判断有效性
题目标题:判断输入的字符串是不是一个有效的IP地址 详细描述:请实现如下接口boolisIPAddressValid(constchar* pszIPAddr)输入:pszIPAddr 字符串输出:true 有效的IP地址,false,无效的IP地址 约束输入IP为XXX.XXX.XXX.XXX格式原创 2014-03-29 16:30:01 · 2553 阅读 · 0 评论 -
华为OJ 铁路栈问题
/****************************************************************************** Copyright (C), 2001-2011, Huawei Tech. Co., Ltd. ******************************************************************原创 2014-03-27 18:39:09 · 2921 阅读 · 0 评论 -
求二叉树的深度和广度
#include "OJ.h"#include #include #include using namespace std;/*Description 给定一个二叉树,获取该二叉树的宽度深度。Prototype int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned i原创 2014-03-07 19:28:49 · 1148 阅读 · 0 评论 -
华为OJ 求子数组的最大和
#include #include #include "oj.h"/*功能: 输入:pIntArray:数组,nCout:数组长度 输出: 返回:返回最大值 */int GetMaxSum(int *Array,int left,int right){ if(right-left==1) return Array[left]; int原创 2014-03-05 18:34:03 · 1195 阅读 · 0 评论 -
华为OJ 一个精度问题
第一段double Fact(int k){ double result=1.0; for(int i=1;i<=k;i++) result*=(double)i; return 1.0/result;}void GetResult(int InputNum, double *NumResult){ *NumResult=0.0; for(int i=InputNum;原创 2014-03-05 19:08:57 · 1301 阅读 · 0 评论 -
华为OJ 对象管理器
#include "ObjMgt.h"#include #include #include #include #include #include using namespace std;/*************************************************************************功能:增加单个对象输入:key1 外部关原创 2014-03-02 19:41:57 · 2263 阅读 · 0 评论 -
二叉树遍历
根据前序遍历和中序遍历写出后序遍历#include#include#include#includeusing namespace std;char in_order[30],pre_order[30];int num[30],co[30];int cmp(int a,int b){ return (num[a]<num[b]);}int main(){ //freop原创 2014-04-03 17:05:40 · 596 阅读 · 0 评论 -
华为OJ RTOSck-软中断调度器 自定义优先级
一、背景介绍 RTOSck是中软欧拉开发部自研的一款嵌入式实时操作系统。主要面向中低端嵌入式环境,具有体积小、效率高、易维测等特定。为了实现无上下文及栈切换的高效业务处理,RTOSck支持一种称为软中断的线程机制。软中断具有与中断类似的特性,支持优先级及优先级抢占,处理过程不能挂起。与硬中断通过硬件激活不同,软中断需要通过主动调用软中断激活函数进行激活。 二、题目描述 请模拟原创 2014-04-06 16:48:35 · 4644 阅读 · 0 评论 -
华为OJ 最高分是多少
线段树维护最大值原创 2014-04-06 11:55:42 · 4034 阅读 · 4 评论 -
堆排序 C++实现
#include#include#includeusing namespace std;void HeapAdjust(int *A,int s,int m){ int t=A[s]; for(int i=2*s+1;i<m;i=2*i+1) { if(i+1<m&&A[i]<A[i+1]) i++; if(t>原创 2013-09-23 11:16:03 · 628 阅读 · 0 评论 -
华为OJ 约瑟夫问题
功能: 约瑟夫问题众所周知,原始的约瑟夫问题是这样的:有n个人,编号为1,2,..., n,站成一圈, 每次第m个将会被处决,直到只剩下一个人。约瑟夫通过给出m来决定赦免其中的一个人。 例如当n=6,m=5时,5,4,6,2,3将会被依次处决,而1将会幸免。 假如有k个好人,和k个坏人,所有人站成一圈,前k个人是好人,后k个人是坏人, 编写程序计算一个最小的m,使k个坏人都被处原创 2014-04-26 10:30:40 · 1994 阅读 · 0 评论 -
JAVA 插入排序 稳定
package huawei;public final class Demo { /*根据重量排序后,输出帽子颜色 * 举例: 5只小白鼠,重量分别为15 30 5 9 30,帽子颜色依次为CL_RED, CL_BLUE, CL_BLUE, CL_YELLOW, CL_GRAY, * 则排序后的输出的帽子颜色序列应该为CL_BLUE, CL_YELLOW, CL_RED, CL_B原创 2014-04-11 17:34:01 · 795 阅读 · 2 评论 -
约瑟夫环问题两解
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始): k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2并且从k开始报0。现在我们把他们的编号做一下转换:转载 2014-04-26 10:27:45 · 596 阅读 · 0 评论 -
JAVA大数相乘
package huawei;import java.math.BigDecimal;public final class Demo { /***************************************************************************** Description : 两个任意长度的长数相乘, 输出结果 Input Pa原创 2014-04-10 21:02:57 · 843 阅读 · 0 评论 -
判断字符串类型 递归
package huawei;public final class Demo { /* 功能: 根据一组规则识别一个特定的字符串是常见的计算机问题, 定义了如下三种字符串类型: Slump是一串字符,具有如下性质: 1.以'D'或'E'开始 2.第一个字符后由1个或多个'F' 3.之后跟着一个Slump或'G',至此一个Slump结束。原创 2014-04-10 12:07:22 · 1725 阅读 · 1 评论 -
守望者的逃离 动态规划+滚动数组
题目:恶魔猎手尤迪安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,岛上的所有人都会遇难:守望者的跑步速度,为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法原创 2014-04-10 10:46:22 · 1260 阅读 · 0 评论 -
一个支持大数计算的类型 仅不支持除法
#include#include#include#includeusing namespace std;//一个完整的支持大数计算的类型//仅不支持除法int max(int a, int b) { return a > b ? a : b; }const int maxn = 1002;struct bign{ int len, s[maxn]; bi原创 2014-04-07 23:46:33 · 649 阅读 · 0 评论 -
XDU Problem 1255 - 数列游戏
使用优先队列:优先队列简介:http://www.cplusplus.com/reference/stl/ 所有STL容器和STL algorithm的所有函数。 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的原创 2013-12-22 00:41:44 · 518 阅读 · 0 评论 -
XDU Problem 1063 - Enjoy It
#include#include#includeusing namespace std;int main(){ //freopen("data.txt","r",stdin); //freopen("out.txt","w",stdout); char s[100000]; while(gets(s)) { for(int i=0;;i++) {原创 2014-01-02 23:53:41 · 506 阅读 · 0 评论 -
poj 1050 to the max
#include#include#include#include#define MAX 102#define INF -0xFFFFFFusing namespace std;int a[MAX][MAX],b[MAX];int maxsum(int x,int y){ if(y-x==1) return b[x]; int L=INF,R=INF,v=0,ans原创 2013-04-04 23:35:22 · 459 阅读 · 0 评论 -
哈工大 排序、查找算法 新连连看 1005
#include#include#include#include#include#define MAX 12*2using namespace std;char map[MAX][MAX]; //地图int vis[MAX][MAX];int dx[4]={-1,1,0,0}; //上下左右搜索方向int dy[4]={0原创 2013-03-31 23:39:01 · 711 阅读 · 0 评论 -
XDU Problem 1037 - 智破机枪阵
裸的最大二分匹配,匈牙利算法#include#include#include#includeusing namespace std;const int MAX=102;int n,map[MAX][MAX],px[MAX],py[MAX],Min[MAX],Max[MAX],match[MAX],vis[MAX];int dfs(int a){ for(int i=0;i原创 2013-01-07 23:53:34 · 350 阅读 · 0 评论 -
XDU Problem 1033 - 实验室的新机子
扫雷啊,暴力搜索,给定五个位置,分析一下,最多只有16个周围的的格子,然后一一枚举就好了,2^16种,压力很小#include#include#include#include#include#define col 30using namespace std;int dx[8]= {-1,-1,-1,0,0,1,1,1};int dy[8]= {-1,0,1,-1,1,-1,原创 2012-12-07 00:05:03 · 301 阅读 · 0 评论 -
XDU Problem 1016 - Code
排列组合,计数问题#include#include#include#define ll long longusing namespace std;char s[30];ll C_nm(int n,int m){ if(m>n) return 0; ll ans=1; if(n-m<m) m=n-m; for(int i=0;i<m;i++) {原创 2012-12-02 23:37:15 · 245 阅读 · 0 评论 -
XDU Problem 1189 - Problem B -- 查字典
用MAP和SET,轻松搞定#include#include#include#include#include#include#include#includeusingnamespace std;chars[200000];intmain(){ //freopen("data.txt","r",stdin); map mymap; set myset;原创 2012-12-02 23:31:02 · 332 阅读 · 0 评论 -
哈工大 排序、查找算法 1004
#include#include#include#define MAX 55using namespace std;char map[MAX][MAX];int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};int vis[MAX][MAX],n,m;void search(int x,int y){ if(x>=0&&x=0&&y<m&&原创 2013-03-30 20:26:02 · 688 阅读 · 0 评论 -
哈工大 排序、查找算法 1003
#include#include#include#include#include#includeusing namespace std;int main(){ //freopen("data.txt","r",stdin); char s[50]; int total=0; map mymap; set myset; set::ite原创 2013-03-30 19:50:41 · 786 阅读 · 0 评论 -
哈工大 基础算法 1001 计数问题
http://acm.hrbeu.edu.cn/index.php?act=problem&id=1001&cid=17#include #include #include #include using namespace std;int Count(int pre,int n) //前缀出现1的个数,数字n{ int ans=0,t原创 2013-03-23 16:57:54 · 773 阅读 · 0 评论 -
哈工大 基础算法 1002 汉落塔问题
#include#includeusing namespace std;void hanoi(int n,char a,char b,char c) //实现把n个物品从a搬到c{ if(n>=1) //如果只有一个物品,直接搬到c { hanoi(n-1,a,c,b);原创 2013-03-23 17:25:48 · 1152 阅读 · 0 评论 -
腾讯 编程马拉松 1001 算日历的
#include#includeusing namespace std;void add(int &year,int &month,int &day){ if(day>=28) { if(month==12&&day==31) {year++;month=1;day=1;return;} if((month==1||month==3||mo原创 2013-03-23 21:12:49 · 801 阅读 · 0 评论 -
XDU Problem 1039 - Qinz`s Game
每天从所占城堡中广搜看是否有周围的城堡能够被占领,如果能就加入,如果没人一个可以占领。输出NO#include#include#include#include#define MAX 55using namespace std;int map[MAX][MAX],n,m,vis[MAX][MAX],x[MAX*MAX],y[MAX*MAX],k,power;int dx[4]={-原创 2013-05-02 23:39:25 · 484 阅读 · 0 评论 -
XDU Problem 1241 - 最远曼哈顿距离
把绝对值展开就行了,四种情况#include#include#include#includelong long x[4];using namespace std;int main(){ //freopen("data.txt","r",stdin); memset(x,0,sizeof(x)); int N,Q; cin>>N; while原创 2013-05-01 23:23:50 · 472 阅读 · 0 评论 -
XDU Problem 1105 - 打麻将
枚举+贪心,时间复杂度O(M^3)。先枚举听的牌,把这张牌加入;再枚举对子,把枚举到的对子去掉;最后从小到大贪心处理:如果数字i有不少于三张的牌,先去掉(i,i,i),如果i的牌数不等于0,则重复去掉(i,i+1,i+2)直到i的牌数等于0。去掉的过程中如果发现有某张牌缺少不能组成顺子,则不能听牌。也可以先记录记录下最大的牌优化一下#include#include#include#i原创 2013-05-01 22:11:03 · 515 阅读 · 0 评论 -
编程之美 2013 集会
#include#include#include#include#define EPS 1e-9#define MAX 50005#define INF 0xfffffff#define L -10005#define R 10005using namespace std;int n;double px[MAX],py[MAX];double total(double x,原创 2013-04-16 20:12:14 · 709 阅读 · 0 评论 -
2013 编程之美 初赛第二场 管道系统小数据
#include#include#include#include#define MAX 205const int INF=999999999;using namespace std;int flow[MAX][MAX],cap[MAX][MAX],a[MAX],f[MAX],n;//a[i]表示流入i点的流量inline int min(int a,int b) {return a原创 2013-04-14 20:54:16 · 683 阅读 · 0 评论 -
哈工大 ACM 排序、查找算法 1001
#include#include#include#include#include#includeusing namespace std;int main(){ //freopen("data.txt","r",stdin); string str; int flag=0,n,k=1; char s[30]; while(cin>>n)原创 2013-03-28 17:14:22 · 713 阅读 · 0 评论 -
微软2013 编程之美 第一题 传话游戏
#include#include#include#include#includeusing namespace std;int main(){ //freopen("data.txt","r",stdin); int T,k=1; scanf("%d",&T); while(T--) { int n,m; str原创 2013-04-08 18:19:04 · 875 阅读 · 4 评论