- 博客(108)
- 资源 (2)
- 收藏
- 关注
原创 P1216 [IOI1994]数字三角形 Number Triangles 计算状态转移的方法
题目:题目链接计算状态转移的方法:方法一:递推计算。时间复杂度显然是O(n*n)。递推的关键是边界和计算顺序。在多数情况下,递推法的时间复杂度是:状态总数×每个状态的决策个数×决策时间。如果不同状态的决策个数不同,需具体问题具体分析。程序如下(需注意边界处理):#include <iostream>using namespace std;const int N=1...
2019-01-31 20:09:03 283
原创 算法提高 质因数
题目链接#include <iostream>using namespace std;bool isPrime(int n){ for(int i = 2; i*i <= n; i++) if(n%i == 0) return false; return true;}int main(int argc, char *argv[]) { int n; ...
2019-01-31 16:50:45 295
原创 算法训练 P0501 用位操作实现无符号整数的乘法运算
题目链接首先实现二进制加法:位的异或运算跟求'和'的结果一致:异或 1^1=0 1^0=1 0^0=0求和 1+1=0 1+0=1 0+0=0位的与运算跟求'进位‘的结果一致:位与 1&1=1 1&0=0 0&0=0进位 1+1=1 1+0=0 0+0=0题目已经给出整数为正,否则需要在运算时将整数转换为相应的正整数。#include &...
2019-01-31 16:18:37 1340
原创 算法训练 P0504
题目链接 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,Unclear和Nuclear、Rimon和MinOR都是Anagrams。编写一个程序,输入两个单词(只包含英文字母),然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。#include <io...
2019-01-31 15:44:13 651
原创 算法训练 P0502
题目链接编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印较小的那个值。例如,假设用户输入的是“100 150 150 200 250”,则输出为150。输入: 6 100 150 150 200 20...
2019-01-31 15:18:15 1200
原创 算法训练 P0505
题目链接一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5!=1*2*3*4*5=120,因此5!最右边的那个...
2019-01-31 14:57:25 3030 2
原创 算法训练 素因子去重
题目链接问题描述 给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1分析:之前写了需要判断是素数(虽然通过了);后面发现是不需要判断的。因为当你每次去掉一个素因子后,这个因子的倍数就会不存在了。这个和素数筛选差不多,只不过素数筛选是标记,这里是删除。 因为i从最小的质因子2开始并且每次循环结束得到的新的n都已经不再包含上一个质...
2019-01-31 14:51:09 3726 13
原创 Average UVA - 1451 数形结合
题目链接大意:给定一个长度为n的01串,选一个长度至少为L的连续子串,使得子串中数字的平均值最大。如果有多解,子串长度应尽量小;如果仍有多解,起点编号尽量小。序列中的字符编号为1~n,因此[1,n]就是完整的字符串。1≤n≤100000,1≤L≤1000。例如,对于如下长度为17的序列00101011011011010,如果L=7,最大平均值为6/8(子序列为[7,14],其长度为8)...
2019-01-31 13:48:44 272
原创 Defense Lines UVA - 1471 防线
题目:https://vjudge.net/problem/UVA-1471#author=0题意:给定一个序列,要求删去一个连续子序列后,得到的序列有一个最长的连续递增序列,输出最长连续递增序列长度【分析】为了方便叙述,下面用L序列表示“连续递增子序列”。删除一个子序列之后,得到的最长L序列应该是由两个序列拼起来的,如图8-15所示。最容易想到的算法是枚举j和i(前提是A[j]&...
2019-01-30 17:20:50 232
原创 蓝桥杯 练习系统---基础练习 题解 C++
以下代码均已通过蓝桥杯系统测试,如果存在错误或不能通过测试还望指出。以下均为连接,点击即可转到相应题解代码。目录BASIC-1~10BASIC-11~20BASIC-21~30BASIC-1~10BASIC-1基础练习 闰年判断BASIC-2基础练习 01字串BASIC-3基础练习 字母图形BASIC-4 数列特征BASIC-5 查找整数BASIC-...
2019-01-30 16:44:31 2017
原创 Unique Snowflakes UVA - 11572 唯一的雪花 滑动窗口
题目:https://vjudge.net/problem/UVA-11572【分析】假设序列元素从0开始编号,所求连续子序列的左端点为L,右端点为R。首先考虑起点L=0的情况。可以从R=0开始不断增加R,相当于把所求序列的右端点往右延伸。当无法延伸(即A[R+1]在子序列A[L~R]中出现过)时,只需增大L,并且继续延伸R。既然当前的A[L~R]是可行解,L增大之后必然还是可行解,所以不必...
2019-01-30 16:44:09 233
原创 基础练习 特殊回文数
题目链接 蓝桥杯---基础练习 题解问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。#include <iostream>using namespace std;int main(int argc, char *argv[])...
2019-01-29 17:21:14 228
原创 基础练习 回文数
题目链接 蓝桥杯---基础练习 题解问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。输出格式 按从小到大的顺序输出满足条件的四位十进制数。#include <iostream>using namespace std;int main(int argc, char *argv...
2019-01-29 17:18:19 263
原创 基础练习 特殊的数字
题目链接 蓝桥杯---基础练习 题解问题描述 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。输出格式 按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。#include <iostream>using namespace std...
2019-01-29 17:15:54 243
原创 基础练习 杨辉三角形
题目链接 蓝桥杯---基础练习 题解问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加 下面给出了杨辉三角形的前4行:1 1 11 2 1 1 3 3 1给出n,输出它的前n行。...
2019-01-29 17:13:49 361 1
原创 基础练习 查找整数
题目链接 蓝桥杯---基础练习 题解问题描述给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。#include <iostream>using namespace std;int main(int argc, char *argv[]) { int n=0; cin>>n; i...
2019-01-29 17:10:22 377
原创 基础练习 数列特征
题目链接 蓝桥杯---基础练习 题解问题描述给出n个数,找出这n个数的最大值,最小值,和。#include <iostream>using namespace std;int main(int argc, char *argv[]) { int n; cin>>n; int a[10005]; for(int i=...
2019-01-29 17:01:58 246
原创 基础练习 时间转换
题目链接 蓝桥杯---基础练习 题解问题描述 给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输...
2019-01-29 12:46:56 257
原创 算法提高 时间转换
题目:http://lx.lanqiao.cn/problem.page?gpid=T183 #include <iostream>using namespace std;int main(int argc, char** argv) { int n; cin>>n; cout<<n/1440<<" "<<n%1440...
2019-01-29 12:43:43 286
原创 算法训练 寂寞的数
题目链接问题描述 道德经曰:一生二,二生三,三生万物。 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如,d(23)=23+2+3=28, d(1481)=1481+1+4+8+1=1495。 因此,给定了任意一个n作为起点,你可以构造如下一个递增序列:n,d(n),d(d(n)),d(d(d(n)))....例如,从33开始的递增序列为: 33,...
2019-01-29 12:21:10 695
原创 算法训练 字符串的展开
题目链接 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下: (1) 遇到下面的情况需要做字符...
2019-01-29 11:55:15 352
原创 Amphiphilic Carbon Molecules UVA - 1606 两亲性分子 扫描法
题目:https://vjudge.net/problem/UVA-1606 扫描法。扫描法类似于一种带有顺序的枚举法。例如,从左到右考虑数组的各个元素,也可以说从左到右“扫描”。它和普通枚举法的重要区别是:扫描法往往在枚举时维护一些重要的量,从而简化计算。【分析】不妨假设隔板一定经过至少两个点(否则可以移动隔板使其经过两个点,并且总数不会变小),则最简单的想法是:枚举两个点,然后输出两...
2019-01-28 20:22:59 215
转载 atan(y/x)与atan2(y,x)的区别
C/C++标准库中计算正切的函数有两个,一个是atan(y/x),一个是atan2(y, x)。atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2; 当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi; 当点(x...
2019-01-28 19:28:19 658
原创 算法提高 开灯游戏 回溯法
题目链接 有9盏灯与9个开关,编号都是1~9。 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。 具体如下: 第一个开关控制第二,第四盏灯; 第二个开关控制第一,第三,第五盏灯; 第三个开关控制第二,第六盏灯; 第四个开关控制第一,第五,第七盏灯; 第五个开关控制第二,第四,第六,第八盏灯; 第六个开关控制第三,第五,第...
2019-01-28 17:40:18 719
原创 算法提高 分数统计
题目:http://lx.lanqiao.cn/problem.page?gpid=T231输入格式 若干0~100的正整数,用空格隔开???输入有点坑,题目意思是输入直到EOF结束,结果测试文件多了一个输入的成绩总数。。。。。#include <iostream>#include <vector>#include <algorithm>...
2019-01-28 15:27:56 372
原创 算法提高 阮小二买彩票
题目链接问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多。可是一段时间观察下来,阮小二发现自己账户的钱增长好慢啊,碰到节假日的时候连个铜板都没进,更郁闷的是这些天分文不进就算了,可恨的是银行这几天还有可能“落井下石”(代扣个人所得税),看着自己账户的钱被负增长了,阮小二就有被割肉的感觉(太痛苦了!)...
2019-01-28 14:43:27 291
原创 new string()和直接赋值的关系和异同
由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。 其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象是不检查字符串池的,而是直接在堆区或栈区创...
2019-01-28 14:18:55 722
原创 算法提高 班级排名
题目:算法提高 班级排名 #include <iostream>#include <string>#include <algorithm>#include <map>using namespace std;const string NAME="DaDa";struct Student{ int score; string nam...
2019-01-27 21:26:49 347
原创 算法提高 三角形面积
题目:http://lx.lanqiao.cn/problem.page?gpid=T275问题描述 由三角形的三边长,求其面积。 提示:由三角形的三边a,b,c求面积可以用如下的公式: s=(a+b+c)/2 面积=#include <cstdio>#include <cmath>int main() { double a, b, c;...
2019-01-27 20:25:16 172
原创 Wine trading in Gergovia UVA - 11054 Gergovia的酒交易---等价转换
题目:https://vjudge.net/problem/UVA-11054【分析】考虑最左边的村庄。如果需要买酒,即a1>0,则一定有劳动力从村庄2往左运给村庄1,而不管这些酒是从哪里来的(可能就是村庄2产的,也可能是更右边的村庄运到村庄2的)。这样,问题就等价于只有村庄2~n,且第2个村庄的需求为a1+a2的情形。不难发现,ai<0时这个推理也成立(劳动力同样需要|ai|个...
2019-01-27 20:14:02 230
原创 fill和memset的区别
fill函数的作用是:按照单元赋值,将一个区间的元素都赋予val值。函数参数:fill(vec.begin(), vec.end(), val); val为将要替换的值。#include <algorithm>fill(vec.begin(), vec.end(), val); //原来容器中每个元素被重置为valmemset函数的作用是:按照字节填充某字符#inc...
2019-01-27 19:58:38 3594 2
原创 Fabled Rooks UVA - 11134 传说中的车 问题分解
题目:https://vjudge.net/problem/UVA-11134 【分析】两个车相互攻击的条件是处于同一行或者同一列,因此不相互攻击的条件就是不在同一行,也不在同一列。可以看出:行和列是无关的,因此可以把原题分解成两个一维问题。在区间[1~n]内选择n个不同的整数,使得第i个整数在闭区间[n1i, n2i]内。思路:将[min,max]用max大小进行排序,排好序后在1~n...
2019-01-27 19:40:22 219
原创 算法提高 格子位置
题目:http://lx.lanqiao.cn/problem.page?gpid=T158#include <cstdio>int main(int argc, char** argv) { int n, x, y; scanf("%d%d%d",&n,&x,&y); for(int j=1; j<=n; j++) printf("(%d...
2019-01-27 15:45:32 436
原创 算法提高 多项式输出
题目:http://lx.lanqiao.cn/problem.page?gpid=T152#include <iostream>#include <cmath>using namespace std;void x(int n){ if(n==0) return; if(n==1) { cout<< 'x'; return; } cou...
2019-01-27 15:08:29 252
原创 算法提高 实数相加
题目:http://lx.lanqiao.cn/problem.page?gpid=T142#include <iostream>#include <algorithm>using namespace std;int main(int argc, char** argv) { string x, y; cin>> x>> y; st...
2019-01-27 13:51:18 168
转载 C++ string的大小写转换
将全部的string转换为一致的大写和小写STL的algorithm库给我们提供了这样的便利,使用模板函数transform可以轻松解决这个问题,开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。transform原型:template < class InputIterator, class OutputIterat...
2019-01-26 21:18:08 7369 2
原创 算法提高 统计单词数
题目链接问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数。 输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母.#include <iostream>#include <map>#include <algorithm>using namespace std;strin...
2019-01-26 21:07:48 411
原创 4 Values whose Sum is 0 UVA - 1152 中途相遇法
题目:https://vjudge.net/problem/UVA-1152【分析】最容易想到的算法就是写一个四重循环枚举a, b, c, d,看看加起来是否等于0,时间复杂度为O(n4),超时。一个稍好的方法是枚举a, b, c,则只需要在集合D里找找是否有元素-a-bc,如果存在,则方案加1。如果排序后使用二分查找,时间复杂度为O(n3logn)。把刚才的方法加以推广,就可以得到一个...
2019-01-26 19:52:47 465
原创 Building for UN UVA - 1605 联合国大楼 构造法
题目:https://vjudge.net/problem/UVA-1605 思路:一共只有两层,每层都是n*n的,第一层第i行全是国家i,第二层第j列全是国家j。这样每个国家肯定相邻#include <iostream>using namespace std;char country(int i){ return i>=26 ? 'a'+i-26 : 'A'+...
2019-01-26 17:32:18 277
原创 priority_queue优先队列的使用
priority_queue头文件<queue>相关定义优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队(即默认大根堆)。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新...
2019-01-26 16:56:17 291
算法竞赛入门经典--训练指南,代码仓库最新版
2019-04-13
算法竞赛入门经典--训练指南,代码仓库
2019-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人