ACM笔记
文章平均质量分 57
07H_JH
阿里云高级工程师,专注于大数据与数据库领域
展开
-
数组移动
如题,如有数组abcd1234,让数组向右边移动两位,变成了34abcd12,现在要求在特定长度的数组array中,要求移动n位,并在0(n)的时间复杂度下完成。 如果是首先我们假定数组的长度是L,如果移动的位数大于L的话,其实等同于移动了n%L位,我们如果按照循环的方式来移动数组,可得如下的代码 n=%L;//移动n位for(int i=0;i temp = array转载 2013-08-05 11:31:27 · 1026 阅读 · 0 评论 -
递归实现n皇后问题
a数组代表列冲突,从a[0]~a[7]代表第0列到第7列。如果某列上已经有皇后,则为1,否则为0。数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14]。如果某条主对角线上已经有皇后,则为1,否则为0。数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14]。如果某条从对角线上已经有皇后,则为1,否则为0。原创 2014-06-16 11:12:16 · 687 阅读 · 0 评论 -
10个重要算法C实现
包括拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 。都是经典的数学算法,希望能开托您的思路。转自kunli.info1.拉格朗日插值多项式 ,用于离散数据的拟合C/C++ code#include stdio.h> #include conio.h> #include alloc.h> float lagrange(float转载 2014-06-18 10:14:23 · 802 阅读 · 0 评论 -
打靶算法
#include #include using namespace std;int sum;int store[10];void Output(){ for(int i = 9; i>=0; --i) { cout } cout原创 2014-06-16 10:42:45 · 2428 阅读 · 1 评论 -
Problem 1007 - 做一名正气的西电人
Description 一天,wm和zyf想比比谁比较正气,但正气这种东西无法量化难以比较,为此,他们想出了一个方法,两人各写一个数字,然后转化为二进制,谁的数字中二进制1多谁就比较正气!Input 输入包含多组数据,EOF结束。 每组数据包含两行,代表两个非负整数a,b(0Output 每组数据输出一行,输出正气的西电人名字"wm"或"z原创 2014-07-10 23:02:42 · 878 阅读 · 0 评论 -
POJ-高级机密
题目描述: 很多情况下,我们需要对信息进行加密。特别是随着Internet的飞速发展,加密技术就显得尤为重要。 很早以前,罗马人为了在战争中传递信息,频繁地使用替换法进行信息加密。然而在计算机奇数高速发展的今天,这种替换法显得不堪一击。因此密码研究人员正在试图寻找一样易于编码、但不易于解码的编码规则。 目前比较流行的编码规则称为RSA,是由美国麻省理原创 2014-07-10 22:11:07 · 964 阅读 · 0 评论 -
XDOJ-1002最喜欢的数字
大神代码赏析:#include#define N 100000int main(){ int e[N+1] = {0}, p[N], pn = 0, an, m, i, j, t; for(i = 2; i <= N; e[i++] = 1); for(i = 2; i <= N; i++) if(e[i]) for(p[pn++] = i, j =原创 2014-07-09 23:36:29 · 1053 阅读 · 0 评论 -
Problem 1049 - 斐波那契数
#include#includeint a,b,c,d,e,sum;char s[10005];int main(){ int t; scanf("%d",&t); while (t--) { sum=0; scanf("%s",&s); d=strlen(s);原创 2014-07-10 21:38:58 · 739 阅读 · 0 评论 -
动态规划总结
动态规划终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些动态规划的问题。这包括书上介绍过的计算二项式系数,Warshall算法求传递闭包,Floyd算法求完全最短转载 2014-07-09 23:39:20 · 691 阅读 · 0 评论 -
模式匹配算法
暴力匹配算法int Violentmatch(char* s, char* p) { int sLen = strlen(s); int pLen = strlen(p); int ans = -1; int i = 0; int j = 0; while (i {转载 2014-07-29 14:33:20 · 790 阅读 · 0 评论 -
Problem 1098 - 城镇距离
Problem 1098 - 城镇距离Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 87 Accepted: 13 Special Judge: NoDescription 有N个城镇在一条直线上,并且没有任意两个城镇重叠,他们两两的距离有N*(N-1)/2个,原创 2014-07-10 22:50:08 · 1235 阅读 · 0 评论 -
C语言决赛代码
#include#include#includestruct book{int num;char bname[50];char wname[20];char press[50];char sort[50];int time;float price; struct book *next;};struct book *creatbook()原创 2014-06-23 09:36:11 · 879 阅读 · 0 评论 -
哈夫曼译码器
#include#include#include#include#define N 27#define TYPE inttypedef struct { TYPE w; int f,l,r;}HNode,*Htree;typedef struct{ char c; char code[10];}Hcode, *Huffman;void creat_Huf原创 2014-06-23 09:46:42 · 1044 阅读 · 0 评论 -
C-helloword 的实现
#include int n[]={0x48, 0x65,0x6C,0x6C, 0x6F,0x2C,0x20, 0x77,0x6F,0x72, 0x6C,0x64,0x21, 0x0A,0x00},*m=n; main(n){ putchar (*m)!='\0'?main (m++)原创 2014-06-23 09:43:42 · 881 阅读 · 0 评论 -
c初赛——字符串分析
#include"stdio.h"#include"string.h"#include"io.h"#include"ctype.h"#include"stdlib.h"int main(){FILE *fp;char c[100]; int sum[30],num[50],i=0,l,s=0,N=1,g=0,j; int temp;原创 2014-06-23 09:50:16 · 896 阅读 · 0 评论 -
编程技巧
编程技巧javaC++C++比如在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值 fabs(a-b) 是否小于某个阈值,例如 1e-9。 判断一个整数是否是为奇数,用 x % 2 != 0,不要用 x % 2 == 1,因为 x 可能是负 数。用 char 的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到 char 可能是负数。有的原创 2016-03-25 17:55:37 · 594 阅读 · 0 评论 -
2016"百度之星" - 初赛(Astar Round2B)解题报告
此文章可以使用目录功能哟↑(点击上方[+])被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了...链接→2016"百度之星" - 初赛(Astar Round2B) Problem 1001 区间的价值Accept: 0 Submit: 0Time Limit: 10000/5000 mSec(Java/Others) Memory Li转载 2016-05-31 20:32:24 · 568 阅读 · 0 评论 -
迷宫探索
面试习题原创 2014-06-16 12:05:53 · 905 阅读 · 0 评论 -
压缩字符串
/*压缩字符串输入只含A-Z的字符串 不超过1000个字母 将连续相同字母压缩为重复次数+字母例输入ABBCCC输出A2B3C*/#include int main(){int i,count;char tch,str[1005];//存储字符串最长1000个字符while(gets(str))//输入字符{count = 1;tch原创 2014-06-16 12:23:00 · 1227 阅读 · 0 评论 -
算法_三元组的数量
{5 3 1}和{7 5 3}是2组不同的等差三元组,除了等差的性质之外,还有个奇妙的地方在于:5^2 – 3^2 – 1^2 = 7^2 – 5^2 – 3^2 = N = 15。{19 15 11}同{7 5 3}这对三元组也存在同样的性质:19^2 – 15^2 – 11^2 = 7^2 – 5^2 – 3^2 = N = 15。这种成对的三元组还有很多。当N = 15时,有转载 2013-12-31 21:08:05 · 3453 阅读 · 1 评论 -
算法——bing字典问题
本届大赛由微软必应词典冠名,必应词典(Bing Dictionary)是微软推出的新一代英语学习引擎,里面收录了很多我们常见的单词。但现实生活中,我们也经常能看到一些毫无规则的字符串,导致词典无法正常收录,不过,我们是否可以从无规则的字符串中提取出正规的单词呢?例如有一个字符串"iinbinbing",截取不同位置的字符‘b’、‘i’、‘n’、‘g’组合成单词"bing"。若从1开始计数的转载 2013-12-31 21:02:29 · 1547 阅读 · 2 评论 -
字符串排序
字符串排序的算法,将字符串从小到大输出样例输入22HelloWorld4ILoveCLanguage!样例输出HelloWorldCILanguage!Lovecode:#include#includeint main(){ int t,n; int k,i,j,m; char a[101][201],temp原创 2014-01-20 14:52:34 · 981 阅读 · 0 评论 -
KMP
字符串匹配的算法当属KMP最为著名了,人人皆知,但是KMP算法是如何做到高效率字符串匹配的呢? 我们首先来看看一般的暴力的字符串匹配算法,对于串s和模式串pattern,依次枚举s中的每一个字符作为起点与pattern尝试进行匹配,直到遇到不匹配的字符的时候,取下一个s中的字符作为起点与模式串pattern重新进行匹配。我们知道这样的时间复杂度是O(n*m)的,显然效率很不好。原创 2014-06-28 17:35:47 · 709 阅读 · 0 评论 -
找到第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。ASCII码共有128个,所以可以建一个包含128个元素的数组,初始化为0。扫描字符串,出现某字符,就自增该字符对应的ASCII值为下标的元素值!代码如下:[cpp转载 2014-07-20 01:14:07 · 801 阅读 · 0 评论 -
求解电文哈弗曼加权路径大小
# include using namespace std ;typedef struct { unsigned int weight ; //节点的权值 unsigned int parent ; unsigned int lchild ; unsigned int rchild ;}HTNode,*HuffmanTree;//typedef char** HuffmanCo原创 2014-06-30 17:12:10 · 806 阅读 · 0 评论 -
数组平衡点问题
题目:找数组平衡点问题:给定一个整数数组P,A[0..N - 1] ,平衡点定义为整数P, 满足A[0] + A[1] +...+A[P - 1] = A[P + 1] + A[P + 2] + ... + A[N - 1]注意不包含P元素。输出任何一个平衡点,如果没有,则输出-1。如果P == 0 等号左边是0,P == N - 1等号右边是转载 2014-06-30 16:51:27 · 1156 阅读 · 0 评论 -
素数
没啥好说的,求质数的话,有几种方法,一种是筛。另外一种是质数判定。筛的话,就是用一个bool数组,每次把倍数设置上,大概这样:[cpp] view plaincopyfor (i = 2; i if (!mark[i]) { //是质数 for (j = i * i; j转载 2014-06-30 16:50:00 · 649 阅读 · 0 评论 -
求高精度幂
POJ 1001 – Exponentiation求高精度幂时间限制:500毫秒 内存限制:10000KB【问题描述】对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。现在要你解决的问题是:对一个实数R(0.0 n),其中n是整数并且0 【输入格式】输入包括多组转载 2014-06-30 17:52:52 · 3298 阅读 · 1 评论 -
字符串移动
题目要求,就是把字符串循环移位,这个是比较常见的面试题了,要时间复杂度O(n),空间复杂度O(1)。 这个题是比较常见的面试题了,《编程珠玑》上有,应该还有不少书上也有。 比如把字符串abcdefgh右循环移位4位,就编程了efghabcd。 我们可以考虑如下3个步骤: 先把abcd翻转变为dcba,再把efgh翻转载 2014-06-30 16:47:45 · 767 阅读 · 0 评论 -
数组移动
给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,最终把它置换成a1,b1,a2,b2,...an,bn。分析:本题是完美洗牌问题的变形。完美洗牌问题: 给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,最终把它置换成b1,a1,b2,a2,...bn,an。我们先解决完美洗牌问题。为方便起见,我们考虑的是一个下标从1转载 2014-06-30 16:58:34 · 826 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题:#include#include#define OK 1#define ERROR 0#define OVERFLOW -2typedef int status;typedef int ElemType;typedef struct CList{ ElemType location; ElemType code; struct CList *nex原创 2014-07-20 01:08:11 · 670 阅读 · 0 评论 -
第九届西电ACM校赛解答
#include#include#includeusing namespace std;int main(){ ifstream in("E:\\read.txt"); string s; int t=0,j,start; int i=0; while(getline(in,s)){ //cout<<s<<endl; // t++; for(j=原创 2014-07-24 01:07:36 · 3328 阅读 · 0 评论 -
F(M,N)求解不大于N的自然数和是M的组成序列个数
#include "stdio.h"#include "conio.h"int f(int m,int n){ if(m==1) return 1; if(n==1) { return 1; } if(m { return f(m,m); }原创 2014-06-12 15:40:52 · 1194 阅读 · 0 评论 -
模拟迷宫
#include#define ROW 8#define COLUMN 8#define STEP ROW*COLUMN/*ROW表示迷宫的行数,COLUMN表示迷宫的列数,STEP表示队列的容量*///定义一个用来记录迷宫探路的队列struct StepQueue{int x,y; int PreStep;}StepQ[STEP],tmpSt原创 2014-06-16 11:28:30 · 712 阅读 · 0 评论 -
XDOJ 复试解答
1.求一串数中大于1素数之和输入输入个数 数字 不超过100个数 不超过10组 多组输入 0结束例输入 4 1 2 3 45 1 2 3 4 50输出5102.压缩字符串输入只含A-Z的字符串 不超过1000个字母 将连续相同字母压缩为重复次数+字幕(这个忘记是多组输入还是单组了)例输入ABBCCC输出A2B3C原创 2014-07-25 02:14:03 · 1332 阅读 · 0 评论 -
C项目-校园导游系统
#include #include #include #include #include #define MAX 100000#define NUM 30#define FALSE 0#define TURE 1typedef struct ArcNode原创 2014-06-23 09:40:19 · 4790 阅读 · 3 评论