
C
C语言以及C++
The_best_man
努力学习的一只IT小白
展开
-
并查集的使用及其实现
并查集概述性质并查集算法(union_find sets)不支持分割一个集合,求连通子图、求最小生成树用法并查集是由一个数组pre[],和两个函数构成的,一个函数为find()函数,用于寻找前导点的,第二个函数是join()用于合并路线的int find(int x){ int r=x; while(pre[r]!=r) r=pre[r];//找到他的前导结点 in原创 2017-03-16 11:13:25 · 33710 阅读 · 17 评论 -
并查集详解
这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告转载 2017-03-16 09:35:38 · 9271 阅读 · 18 评论 -
STL中随机数的调用
由于我们对我们写的程序需要测试数据,为了我们的程序能够经得起任何考验我们采用随机数库不一定没有bug,使用之前测试库是一个好习惯随机数发生器rand()核心函数是#include<cstdlib>中的rand()函数他生成一个闭区间[0,RAND_MAX]内的均匀随机数(均匀的意思是:该区间内的每一个数字随机被获取的概率相同),其中RAND_MAX至少为32767(2^15-1)这里的随机数是伪随机原创 2017-04-17 20:11:25 · 2017 阅读 · 0 评论 -
C++的STL中accumulate的用法
accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理1.累加求和[cpp] view plain copyprint?int sum = accumulate(vec.begin() , vec.end() , 42); int sum = accumulate(vec.begin(转载 2017-04-13 09:40:42 · 729 阅读 · 0 评论 -
蓝桥杯数字排列
今有7对数字:两个1,两个2,两个3,…两个7,把它们排成一行。 要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:17126425374635当然,如果把它倒过来,也是符合要求的。请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。这道题的基本思想还是dfs,回溯 74XXXX4X7XXXX首先我们将按照题目摆放好 7原创 2017-03-23 22:43:39 · 857 阅读 · 0 评论 -
提高程序运行效率的10个简单方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减转载 2017-03-13 00:26:08 · 3439 阅读 · 0 评论 -
数独
数独9行9列的格子,完成数独 例如: 输入 0 0 5 3 0 0 0 0 0 8 0 0 0 0 0 0 2 0 0 7 0 0 1 0 5 0 0 4 0 0 0 0 5 3 0 0 0 1 0 0 7 0 0 0 6 0 0 3 2 0 0 0 8 0 0 6 0 5 0 0 0 0 9 0 0 4 0 0 0 0 3 0 0 0 0 0 0 9 7 0 0 输出 1原创 2017-03-22 23:42:59 · 849 阅读 · 0 评论 -
第六届决赛真题
A组第一题标题:方格填数在2行5列的格子中填入1到10的数字。 要求: 相邻的格子中的数,右边的大于左边的,下边的大于上边的。如【图1.png】所示的2种,就是合格的填法。请你计算一共有多少种可能的方案。解法1.暴力解决#include<iostream>#include<algorithm>using namespace std;int a[10] = { 1,2,3,4,5,6,7,8原创 2017-04-16 11:31:53 · 526 阅读 · 0 评论 -
凑平方数
题目凑平方数把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。 比如:0, 36, 5948721再比如: 1098524736 1, 25, 6390784 0, 4, 289, 15376 等等…注意,0可以作为独立的数字,但不能作为多位数字的开始。 选自第七届蓝桥杯B组第二题(填空题)分析利用next_permutation()将十个数字排序,然后我们按照d原创 2017-05-04 18:50:56 · 3599 阅读 · 0 评论 -
素数环
输入正整数n,把整数1,2,3,4,….n组成一个环,使得相邻两个整数之和均为素数,输出时从整数1开始逆时针排列,同一个环恰好输出一次。n<=16 样例输入:6 样例输出: 1 4 3 2 5 6 1 6 5 2 3 4 题目来源:算法竞赛入门经典(第2版) 思路:我们需要dfs一步一个脚印来,对于第一个数字,所有的数字均能填充1-n的数字,然后从第二个数字开始我们判断与之前的数是否为素原创 2017-04-27 11:37:38 · 729 阅读 · 0 评论 -
动态规划之0-1背包问题
动态规划之0-1背包问题这是最好理解的动态规划问题描述对于容纳的总质量为c的背包要求从n个物品中任意选取物品使得最后的总价值最大,对于第i个物品质量为wi价值为vi问题分析对于此类问题我们通常采取动态规划(dynamic programming) 即 dp 核心是找到问题的动态转移方程 对于每一个物品我们有两种取法,即选择与不选择 对于每一次选择我们根据之前的一次情况从中选择出最大的值原创 2017-11-26 19:35:28 · 519 阅读 · 0 评论 -
排序算法分析
排序算法分析冒泡排序代码void bubblesort(vector<int> &list){ for (int i = 0; i < list.size()-1; i++) { for (int j = 0; j < list.size() - i - 1; j++) { if (list[j] > list[j + 1原创 2017-10-16 10:28:30 · 342 阅读 · 0 评论 -
【计蒜客】红黑点
题目在二维平面有 n 个红点和 m 个黑点,已知这些点的坐标,这些点不存在三点共线的情况。从这些红点中任意取出三个点,可以构成 n * ( n - 1 ) * ( n - 2 ) / 6 个三角形,求这些三角形中包含黑点的数量为奇数的三角形的数量。输入格式 输入包含多组测试数据,对于每组测试数据: 第一行包含两个整数 n m ( 3 ≤ n ≤ 100 ; 0 ≤ m ≤ 1000 ) 。 接原创 2017-05-20 10:13:20 · 605 阅读 · 0 评论 -
【计蒜客】合法分数的组合
输入一个自然数N,我们总可以得到一些满足“1≤b≤N,0≤a/b≤1”条件的最简分数a/b(分子和分母互质的分数),请找出所有满足条件的分数。比方说,当N=5时,所有解为:0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1现在,你需要对于一个给定的自然数N,1≤N≤160,请编程按分数值递增的顺序输出所有解。注:0和任意自然数的最大公约数就是那个自然数、互质指最大原创 2017-08-08 19:13:53 · 646 阅读 · 0 评论 -
计蒜之道2017第五场
UCloud 刚刚建立一个新机房,近日正在进行网络搭建。机房内有 nnn 台服务器和 mmm 个分线器,整个机房只有一个网线出口。分线器的作用是将一根网线转换成多根网线。蒜头君也知道每个分线器输出的最大网线根数(不一定要将分线器输出的每根线都用上),问你至少需要使用多少个分线器才能使得每台服务器都有网线可用。输入格式第一行输入 n,m(0≤n,m≤100)n,m(0 \le n,m原创 2017-06-03 20:07:16 · 869 阅读 · 0 评论 -
广场舞
题目LQ市的市民广场是一个多边形,广场上铺满了大理石的地板砖。地板砖铺得方方正正,就像坐标轴纸一样。 以某四块砖相接的点为原点,地板砖的两条边为两个正方向,一块砖的边长为横纵坐标的单位长度, 则所有横纵坐标都为整数的点都是四块砖的交点(如果在广场内)。广场的砖单调无趣,却给跳广场舞的市民们提供了绝佳的参照物。每天傍晚,都会有大批市民前来跳舞。 舞者每次都会选一块完整的砖来跳舞,两个人不会选择同原创 2017-05-11 22:42:08 · 2428 阅读 · 6 评论 -
居民集会
题目居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di。每年,蓝桥村都要举行一次集会。今年,由于村里的人口太多,村委会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路的终点。已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的路程开销为家庭内的人数ti与距离的乘积。给定每户家庭的位置di和人数ti,请为村委原创 2017-05-18 16:14:09 · 2399 阅读 · 8 评论 -
计蒜客模拟赛(五)第九题
计蒜客模拟赛第九题在一个 n×m 的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。 现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆。 输入格式 第一行输两个整数 n, m,用空格隔开。 接下来 n 行,每行输入原创 2017-04-06 23:19:45 · 1802 阅读 · 4 评论 -
蓝桥杯练习系统试题持续更新
设置精度并且固定小数点的位数#include#include #includeusing namespace std;int main(){ int radius; cin>>radius; double p=atan(1.0)*4; double area=p*radius*radius; cout<<fixed<<setprecision(7)<<area<<endl;原创 2016-12-30 23:17:36 · 2281 阅读 · 1 评论 -
c++数据结构二叉树
#pragma once#includeusing namespace std;templateclass BinaryNode{public: T data;//二叉数元素的数据 BinaryNode *pLchild; BinaryNode *pRchild;//左孩子,右孩子,};templateclass BinaryTree{public: BinaryT原创 2016-11-26 23:11:48 · 653 阅读 · 0 评论 -
名企笔试:2016奇虎360研发工程师内推笔试编程题(出现一次的字符)
正在挑战一个CrackMe的你,把需要填写的前面几位密码都正确猜出了,可是这最后一位密码,好像藏得有点深。CrackMe的作者还挑衅般的在里面藏了个.tar.gz文件,解压缩出来,里面写道你要的最后一个字符就在下面这个字符串里,这个字符是下面整个字符串中第一个只出现一次的字符”。(比如,串是abaccdeff,那么正确字符就是b了) 然而下面给出来的字符串好像太原创 2017-02-28 08:46:24 · 665 阅读 · 0 评论 -
C语言学习
翻译程序的第一步首先把源代码中出现的字符映射到源字符集明显常量#define 的用符号#开头,ANSI标准允许#前有空格或制表符,而且该标准还允许在#和指令的其余部分之间有空格,并且要求#和指令的其余部分不能有空格。指令的定义域从指令的开始直到文件的末尾 定义符号常量或明显常量预处理器指令从#开始,到原创 2017-02-04 09:09:10 · 385 阅读 · 0 评论 -
八皇后算法
两个皇后都不能处于同一行、同一列或同一斜线上 讨论如果是八个皇后,即存在于8*8的行列式中,每行每列一定存在一个皇后,现在我们用queen[row]=col 表示在第row行的皇后处于第col列,位置的选定,5人 然后判断此时皇后所处的位置是否发生冲突,如果没有冲突且没有超过row即进行下一行的判断(递归的形式)void EightQueen::putQueen原创 2017-02-16 11:53:45 · 3043 阅读 · 0 评论 -
最大的最小公倍数
算法训练 最大最小公倍数时间限制:1.0s 内存限制:256.0MB问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 6。分析 1---N中我们应该从大到小考虑,首先我原创 2017-02-08 09:51:03 · 607 阅读 · 0 评论 -
数据结构之查找总结
查找算法 一、查找的基本概念查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 二、顺序查找针对无序序列的一种最简单的查找方式。时间复杂度为O(n)。 三、折半查找针对已排序序列的一种查找方式。并且只适用于顺序存储结构的序列。要求序列中的元素基本不变,在需要做删除和插入操作的时候,会影响检索效率。时间复杂度为O(原创 2016-12-10 22:46:14 · 1032 阅读 · 0 评论 -
第六届蓝桥杯九数分组
九数组分数1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?#include void test(int x[]){ int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; if(a*3==b)原创 2017-03-03 20:17:24 · 867 阅读 · 0 评论 -
关于Vs2015的链接器错误的恢复
在调试程序时,出现了,关于链接器无法解析外部程序,即使写简单的语句也无法正常编译,通过msdn的文档也没有什么帮助,我觉得可能是某些代码将程序的子系统出口封死导致失败下面是,如何解决此类问题的途径,可见某些代码把程序的入口修改导致无法生成exe文件原创 2017-02-23 22:21:38 · 1065 阅读 · 0 评论 -
小明玩牌
小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?#includeusing namespace std;int sum = 0;//手牌数int count1 =原创 2017-03-07 23:16:05 · 936 阅读 · 0 评论 -
方格填数
方格填数如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。注意:在最开始我将设置空格转换为一维数组,我看似觉得思路很正确但是却忽略了对于边界的检验 b原创 2017-03-11 10:45:54 · 701 阅读 · 0 评论 -
通过金矿模型介绍动态规划
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢! ----第一节转载 2017-03-26 09:55:32 · 4385 阅读 · 0 评论 -
加法变乘法
加法变乘法我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+...+10*11+12+...+27*28+29+...+49 = 201510就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。注意:需要你提交的是一个整数,不要原创 2017-03-07 08:55:18 · 672 阅读 · 0 评论 -
查验身份证
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2现在给定原创 2017-03-07 00:07:18 · 531 阅读 · 0 评论 -
蓝桥杯省赛试题(持续更新)
所有题目均来自蓝桥杯比赛试题,所有解法全部出自本人思路,大神请走开,有新的想法的可以留言交流C语言B组第八题四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2原创 2017-01-02 15:57:33 · 1334 阅读 · 0 评论 -
第六届蓝桥杯省赛试题B组
奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要写任何多余的内容或说明性文字。#includeusing na原创 2017-02-26 16:40:28 · 1384 阅读 · 0 评论 -
字符分析
输入一个字符串,内有数字和非数字字符,如:a123x456}17960?302tab5876将其中连续的数字作为一个整体,依次存放到一个数组a中。例如,123放在a[0],456放在a[1]……,统计共有多少整数,并输出这些整数。输入格式:每个输入包含1个测试用例,即一个不超过80位的字符串。输出格式:按照从左到右的顺序输出所有整数,用逗号分隔。输入样例:a原创 2017-03-05 08:59:25 · 818 阅读 · 0 评论 -
vector的使用
vector 类定义了STL提供的一种容器。它满足 动态数组 (大小可以根据需要增长和缩小的数组)的一般性描述。另外,vector还定义了用于操作向量(vector)元素的成员函数。向量实现的功能比数组全部的功能还多的功能 向量可以根据需要增长,而数组 不能。这意味着如果在游戏中使用一个向量存储敌人的对象,他的大小可以增长以适应创建的敌人的数目。如果使用数组,就必须创建一个能储存最大原创 2016-08-04 15:36:14 · 371 阅读 · 0 评论