算法
文章平均质量分 90
laomai
扫尽风残雨败叶,尢剩傲雪斗霜枝
展开
-
麻将普通胡牌算法(带混)
麻将胡牌算法和听牌算法原创 2024-02-13 23:20:41 · 1429 阅读 · 0 评论 -
stl的比较器的规定
今天写一个测试代,码,片段如下:#include <vector>#include <algorithm>using namespace std;class Person{public: unsigned int age = 0; bool used = false;};inline bool operator<(const Person& A,const Person& B){ if (!A.used) return tru原创 2020-10-08 18:25:30 · 189 阅读 · 0 评论 -
用c++求解一道简单的数学题
最近在参加哆嗒数学网组织的闯关活动,第4关的题目为:用0到9组成一个无重复位的数字,要求结果不能是2、3或者5的倍数,即因子中不能含有2、3、5中的任何一个.求出满足条件的最大数字.今天闲来无事,用程序解决了这个问题.基本思路为,首先考虑十个数码全用的情况,此时各位的和为45,则此时无论怎么排列,结果都能被3整除,不符合题意.所以程序的任务是从这n=10个digit中删掉尽可能少的数字,使总和不能被3整除,然后把这些数位进行排列,把得到的结果从大到小排列,然后找出其中第一个满足因子不含2原创 2020-07-24 21:50:56 · 1002 阅读 · 0 评论 -
c++生成n选m的组合
题描述:有n个不同的数,现在要从中选取m个,需要按升序输出所有排列,比如从0到9中选出2个的所有无重复组合为0 10 20 30 40 50 60 70 80 91 21 31 41 5...7 87 98 9一共45个,c++代码为#include<cassert>#include<iostream>#include<algorithm>#include<set>#include<vecto原创 2020-07-24 21:27:39 · 1064 阅读 · 0 评论 -
c++输出n选m的所有排列
问题描述:有n个不同的数,现在要从中选取m个,需要按升序输出所有排列,比如从0到9中选出2个的所有排列为0 10 20 3...0 91 01 2...9 8一共10*9=90个c++代码为#include<iostream>#include<algorithm>#include<set>#include<vector>using namespace std;//获取下一个组合struct Permutati.原创 2020-07-24 20:37:13 · 915 阅读 · 0 评论 -
为什么编程上一般习惯左闭右开区间而不是两头都封闭?
今天给一个学生辅导归并排序,他问了上面这个问题.下面是我的一点个人体会,对比一下左闭右开和左闭右闭区间的特点1.使用左开右闭的话,则子区间的长度公式为legnth=end-start,右闭的话长度公式为legnth=end-start+1显然后者的计算要复杂一些2、已知长度L的情况下,右开的调用形式为f(array,start,start+L),右闭的调用形式为f(arra...原创 2020-04-28 10:50:22 · 1959 阅读 · 0 评论 -
醉鬼同时移动问题的思路
今天有学生问了一个有趣的算法题目:数轴上有n个位置不同的点,各点横坐标已知,分别代表n个醉鬼的位置,每个醉鬼可以向左或者向右水平移动s个距离(不允许原地不动),问所有的人都移动一次后,队伍的最短长度为多少(队伍的长度定义为最右边的人到最左边的人的距离).在https://www.nowcoder.com/questionTerminal/ff0e55dcb75b45b09164c56f87...原创 2019-10-15 23:43:25 · 341 阅读 · 0 评论 -
用归并法统计二进制序列中1的个数
今天遇到一个面试题:如何统计一个二进制整数num中1的个数.这里参考了https://blog.csdn.net/peiyao456/article/details/51724099的第4种思路,非常巧妙,这里写一下心得笔记我们以8位整数为例,首先输入num可以看成一个二进制序列num= a1 b1a2b2 a3b3a4 b4,可以认为他们自动分成8组,每组长度...原创 2019-04-26 11:29:17 · 346 阅读 · 0 评论 -
UVA307的一组测试数据
UVA 307的核心是把集合划分成一些和相等的子集下面的这组数据似乎会造成TLE(我试了两个accept的代码,在这组数据上都运行了很长时间)633 16 4 2 7 31 5 3 18 43 22 49 1 47 46 8 10 37 18 8 50 41 50 2 40 4 33 49 34 6 8 38 23 13 41 29 43 46 34 11 38 5 11 40 1 8...原创 2019-04-20 21:39:19 · 318 阅读 · 1 评论 -
UVA12171ac心得
首先要注意看懂题目的要求,求体积时,如果有空腔(也就是周围都是实心,中间是空气),也要计入体积,所以相当于先在外围构造一圈空气,然后用总体积减去外围空气的总体积即可.第二计算雕塑表面积的时候,实际上就是计算和外围空气有接触的那些面的面积,具体的说,假定从为空气的单元格出发,走到它的一个邻居时发现邻居为实心,此时应该计算的是源单元格的那个接触面的面积(因为进行离散化处理以后,目标实心格的...原创 2018-08-20 10:55:33 · 307 阅读 · 0 评论 -
UVA822 ac要点
首先题目里的每个人按优先级选工作的表达是不准确的,正确的说法是:让每个人都尽量选自己最熟悉的工作,并且如果一个人没找到自己最熟悉的工作的话,则要把挑选机会让给下一个人,而不是继续找自己下一个熟悉的工作.举个例子假定每个人的技能数都是5个,那么最坏情况下要经过5轮才能每个人都分配到工作,也就是第一轮让每个人都尽量选自己最熟悉的工作,如果都找到了,则循环结束。否则没有找到工作的人进行第2轮...原创 2018-07-31 06:54:08 · 439 阅读 · 0 评论 -
UVA207 ac心得
花了4天时间实现了刘汝佳紫书上的例题5-10,也就是UVA207,修改了5版才AC.这里把遇到的坑说一下,供后来者参考1、业余选手只参与排名,不参与分奖金,所以哪怕一个业余选手和其他职业选手同分(从而名次相同),也不输出T2、只有在同一个分数两名或者更多职业选手平分奖金时,这些职业选手的名次后面才输出T,算,所以对没获奖的名次,有多少人并列都不输出T,也就是输出T的条件是本名次的获奖人数&...原创 2018-07-23 18:59:55 · 704 阅读 · 0 评论 -
正交表学习笔记
正交表入门作者:laomai发布时间: 2007/12/09 2011/12/11修改地址:http://blog.csdn.net/laomai第一章 正交表的概念§1-1引子 在科研和生产实践中,人们往往要做许多次实验来进行某项研究。实验条件一般包括很多因素,当因素的值不同时,实验的结果也不一样。原创 2007-12-11 14:27:00 · 9999 阅读 · 12 评论 -
精确覆盖问题学习笔记(四)——算法优化
一、可优化的地方 上一节实现的代码从运行效率上看,有两个重大缺陷:1、每次递归调用前,需要将当前的状态矩阵拷贝一份,然后删除和当前行相交的所有行和列,得到新的矩阵,当矩阵非常大时,拷贝操作所需的时间和空间都很大。2、在实际情况中,矩阵M一般是稀疏矩阵,0的个数远远多于1的个数,如果我们能只处理含1的单元格的话,将大大提高运行的时空效率。二、优化所用到的数据结构 以下原创 2013-06-18 07:06:33 · 2321 阅读 · 0 评论 -
精确覆盖问题学习笔记(五)——优化算法的实现代码
//文件node.h#pragma oncestruct CNode{ CNode* Left; //左节点指针 CNode* Right; //右节点指针 CNode* Up; //上节点指针,对列节点,则为本列最后一个元素的指针 CNode* Down; //下节点指针,对列节点,则为本列第一个元素的指针 int name;原创 2013-06-18 07:24:01 · 2069 阅读 · 0 评论 -
精确覆盖问题学习笔记(三)——算法的初步实现
一、类CExactCoverSolution的声明#include#include#include #include using namespace std;//类型的定义typedef int ELEMENT_TYPE;typedef char SUBSET_NAME; typedef vector ROW;typedef vector MATRIX;原创 2013-06-13 09:15:36 · 1899 阅读 · 0 评论 -
精确覆盖问题学习笔记(二)——基本算法
一、算法的主要流程有了子集的矩阵表达形式之后,我们就可以用Knuth发明的X算法来求出精确覆盖问题的解。(如果你在研究算法,但是没听过knuth的名字并且你又不是计算机的天才的话,请在阅读完本文后立刻去拜读Knuth的大作,呵呵)。这个递归算法(设算法函数的名字为search)的主要流程是1、设置一个子集编号集合S,用来存储本次得到的部分解。开始时S为空。2、判断当前矩阵M是否为空原创 2013-06-11 23:23:34 · 1725 阅读 · 0 评论 -
精确覆盖问题的回溯算法(一)——问题描述
一、问题描述精确覆盖问题(Exact Cover Problem),是指给定了一个全集S以及它的m个子集S1、S2、..Sm以后,要求出一组子集,使这组子集的并等于原来的全集S,且各子集两两不交。例:设S={1,2,3,4,5,6,7},A={1,4,7},B={1,4},C={4,5,7},D={3,5,6},E={2,3,6,7},F={2,7}则子集组原创 2013-06-11 17:51:18 · 3384 阅读 · 1 评论 -
团体对抗单循环对阵编排算法
问题描述: 有A、B两个队,各有N个队员,现在要举行团体单循环对抗赛,即进行N轮比赛,使A队的每个队员都要和B队的所有选手交手一次。要求做出对阵编排表,达到:1、每个选手都和对方的所有选手交手一次。2、第3轮及以后各轮结束时,每个选手自己的先后手数差值的绝对值不大于1。3、每轮对阵时,每个队伍的先手队员数和后手队员数相差至多为1(即每个队伍都尽可能一半先手,一半后手)。以7人制原创 2011-12-10 21:53:36 · 3665 阅读 · 1 评论