自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 uva507

题目大意: 一段公交车路,各个车站为1,2,3…s, 各个车站之间的景色值是不同的, 求一段连续的车站的景色值之和最大是多少。思路: http://blog.csdn.net/hcbbt/article/details/10454947代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstrin

2015-12-30 21:58:15 250

原创 uva507

题目大意: 一段公交车路,各个车站为1,2,3…s, 各个车站之间的景色值是不同的, 求一段连续的车站的景色值之和最大是多少。思路: http://blog.csdn.net/hcbbt/article/details/10454947代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstrin

2015-12-30 20:48:00 385

原创 uva10041

题目大意: 求vito到各个邻居家的距离和要最小,最小为多少。思路: 本来想说求平均数的,可惜WA了,后来想了个样例,1 2 2 2 2 2 , 11/6 = 1的,其实要选择住在2距离才会最短。所以这题要求的是中位数。代码:#include <iostream> using namespace std;#include <cstring>#include <stdio.h>#incl

2015-12-30 17:33:59 387

原创 uva11129

题目大意: 构成一个任意一个大于2的子序列都不是等差数列的序列。思路: 刚开始完全都没有思路,后来看了题解才懂的。 例如 0 1 2 3 4 ,先变成呢个 0 2 4 1 3 然后再递归的解决变成 0 4 2 3 1代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define

2015-12-30 17:04:43 348

原创 uva10245

“题目大意: 找出最近的点的距离。如果距离大于10000 就等同于INFINITY思路: 刚开始想说直接暴力的,但是看了数据觉得会超时, 所以就去看了题解。第一次做分治问题。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <algorithm>#include

2015-12-30 16:24:35 348

原创 uva10716

题目大意: 找到最少的步数可以使得所给字符串变成回文,可以变成回文就输出步数,不能的话就输出Impossible。思路: 刚开始想说,左边完全不动,右边去满足左边的,看了题解之后,是找到最两端满足条件的最少步数的字符之后,开始向内缩小区间,以此类推。代码:#include <iostream>using namespace std;#include <cstring>#include <s

2015-12-29 23:19:55 265

原创 uva10720

题目大意: 知道各个节点的度,判断该图是否为简单图。思路: 本来想说奇数度的节点偶数个就可以保证这是个简单图,可以是错的。应该找出度数最大(M)的点,让后面的M个点度数–,如果有出现<0的那么必然就不能构成简单图。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <

2015-12-29 22:40:23 245

原创 uva993

题目大意: 给出一个数字,找出最小的可以满足每个数乘积等于它的数。思路:从9到2的找,因为这样才可以保证尽可能的小,不断的求余。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int main() { int cases,N,Q,count1,a[10]; bool fl

2015-12-29 19:17:10 249

原创 uva11100

题目大意: 有几个包裹,包裹之间是有互相包含关系的,求最少的箱子数可以将所有包裹都放进去。思路: 最多的重复个数k就需要几个箱子,因为相同的之间是不可以相互包含的。将包裹进行排序,然后从一个数i,每加K就是放在同一个箱子中的,照着这个样子输出就可以了。代码:#include <iostream>using namespace std;#include <cstdio>#include <c

2015-12-28 23:18:54 538

原创 uva10382

题目大意: 最少要用多少个给定的圆才能把长度为l,宽度为w的完全覆盖住。思路: 刚开始想到的是区间覆盖问题 可以WA了,后来又改了以下结果超时了 T.T 求帮忙代码: TLE:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <cmath>int N;double

2015-12-28 20:02:20 481

原创 uva10670

题目大意: 给出起始的工作量,和目标的工作量 还有完成一个单元需要给的钱,或者完成全部的一半需要给的钱。怎样选择才可以使雇用的钱数最少。最后按照费用从小到大排序,如果一样大的就按照名字的字典顺序排序。思路:如果剩下的小于M的话,就用完成一个单元的方案,题目规定的。 如果一半*A大于B的话那么就用B,小于的话就用A。代码:#include <iostream>using namespace st

2015-12-28 18:06:33 229

原创 uva11054

题目大意:正数代表的是需要的酒的数量,负数代表的是要卖出的酒的数量,酒店之间都是线性排列的,相邻两个酒店之间的距离都是1。求花最少的费用去交易买卖来满足所有酒店的需求。思路:要使得路费最少的话,利用贪心的思想,就让相邻的两个酒店之间进行交易,不管他们是否可以满足各自的要求,只需要先让前一个满足就可以了。这样路费就只是酒*1,本来想说的是正数去寻找最近的负数的,可是这题的数据量有点大,所以可能会超时,

2015-12-28 15:39:56 343

原创 uva10718

题目大意: 给出N,L,U,找到一个M,让M|N位运算可以最大,满足这个条件的同时要使得M最小。思路: 先将2的0 - 32次方存放到一个数组中,由于没有符号的32位的整数最大为2^32 -1,所以必须存到2^32次方,此时注意要用上longlong 否则就错误了,如果N中的位为0的时候,M必须尽可能的等于1,这样才可以保证M|N最大,但是此时要判断M为1的最小值是否已经超过了U,同理,当N中的

2015-12-28 15:11:40 233

原创 uva10400

题目大意: 运算符号没有优先级的,给出的数字按顺序利用+ - * / 将结果得出来,如果的不出结果就输出无解。思路: 感觉可以直接dfs代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <cmath>int p[105],flag,vis[105][64001],n

2015-12-27 23:03:35 214

原创 uva10602

题目大意: 求最少的步数,可以把给定的字符串全部打出来,要求第一个字符串必须最先打出,其他的可以随便顺序的打出来,系统中本来就有两个操作 一个是复制前一个的 一个是删除字符串中的最后一个字符,这些都是不算步数的。思路: 利用贪心的想法,每次都找出与当前字符串最多字符相同的字符串,但是值得注意的是 一旦找过的字符串就不能在找了。代码:#include <iostream>using namesp

2015-12-27 22:36:27 308

原创 uva714

题目大意: 按顺序给你N个数,将这N个数分成连续的M段,使得这M段每段的和中的最大值最小,输出最小值(1<=N<=100000,1<=M<=N,每个数在1到10000之间),如果有多种可能的话,尽量在前面进行划分。思路: 最大值最小化的问题,利用二分法,下界是0 上界是所有数字的和。然后去查找小于等于mid可以划分为几组,如果可以划分的组数大于M的话,那么就表示说这个值太小了,应该l = mid

2015-12-27 20:26:05 608

原创 uva10954

题目大意: 类似于哈夫曼编码,要求出最小的花费。思路:刚开始天真的以为只要把最前面的两个加起来就可以了。。后来发现要排序了才可以,然后就想到每次都去排序一次,后来看见题解是用优先级队列实现最小堆的,所以只要用个greater每次都会自动排序了。代码:#include <iostream>using namespace std;#include <cstdio>#include <cstrin

2015-12-27 14:29:50 515

原创 uva1121

题目大意: 找出大于等于limit的最少的数字个数。思路: 一共有N个数字,用一个sum数组把位于它前面的所有数字的和存进去(从1- N),然后判断sum[N]是否大于limit,如果不是的话就表示此题无解,就要输出0,否则就用二分查找,查找最短的长度。代码:#include <iostream>using namespace std;#include <stdio.h>#include

2015-12-27 13:45:41 286

原创 uva10340

题目大意: 在后面一个串中按顺序找到所有与第一个串一样的字母。字母不需要是连续的代码:#include <iostream>using namespace std;#include <cstdio>#include <cstring>const int MAXN = 100200;char s1[MAXN],s2[MAXN];int cmp(char * a,char *b) { i

2015-12-26 21:14:17 313

原创 uva10487

题目大意: 给出的数中,任意两个数相加,找出最接近query的数。思路: 把任意两个数加起来之后,排序完之后,用lower_bound找到插入query的位置,然后找到它左右两边的与它最近的数。输出就可以了。代码:#include <iostream>#include <cstdio>using namespace std;#include <cstring>#include <algo

2015-12-26 21:12:11 349

原创 uva10057

题目大意: 求中位数思路: 如果是奇数个 ,中位数只有一个,找到与中位数相等的都可以, 如果是偶数个,中位数有两个,找到与这两个相等的都可以。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <algorithm>const int MAXN = 1000000;

2015-12-26 21:09:17 288

原创 uva10341

题目大意: 求出满足等式的x思路: 如果formula(a) * formula(b) < 0 那么就是有解的。利用二分进行查找代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <cmath>#define MIN (10e-8)double p,q,r,s,t

2015-12-26 21:07:25 269

原创 uva270

题目大意: 找出一组数据红在同一个直线上的最多的点的个数思路:去求斜率 代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>struct node { float x,y;}n[705];int num;double nn[705]

2015-12-26 21:04:35 194

原创 uva10132

题目大意: 有几个相同的字符串,都被摔成了两个串,题目给出这些串,求最初始的串是什么 自己的代码WA了,别人的代码 代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 310#define LEN 610char word[LEN];struct file{

2015-12-26 21:02:45 347

原创 uva10763

题目大意: 进行交换,要满足两两都可以交换,即它空缺出来的位置必须有人填充,自己想去的位置必须是空的。思路: 就设一个grid数组 如果空缺出来就-1,如果想填充就+1; 最后遍历 是否所有的grid都为0 如果是的话就输出YES,否就输出NO代码:#include <iostream>using namespace std;#include <stdio.h>#include <cst

2015-12-26 20:57:57 325

原创 uva10905

题目大意: 给出的数字中 组成一个最大的思路: 按a+b > b+a 排序 然后直接将排完序的字符号输出就可以了。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>string num[55];int cmp(string a,strin

2015-12-26 20:55:23 210

原创 uva704

题目: 如何转动可以到达目标序列思路: 自己画画图,把顺时针,逆时针90,180的都写出来就知道怎么做了。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <queue>#include <map>const int N = 30;bool ok;char

2015-12-26 20:53:08 293

原创 uva321

值得注意的是,这题题目说了它的开关和房间是交错的。所以进入一个房间之后所有的开关都要按一遍才会是正确的。由于r比较小,可以用二进制进行哈希判重。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int st[50000][11],now[50000],target[11],flag[500

2015-12-26 20:50:52 387

原创 uva10714

题目大意: 给定一段长度,蚂蚁走到两端边缘的话就会往下掉。如果两只蚂蚁相遇了,那么他们都会分别掉头走,给出了蚂蚁的起始坐标,蚂蚁往哪个方向走不确定,求所有蚂蚁掉下去的最短时间和最长时间。思路:其实蚂蚁有没有掉头走,都是走一样的长度的路。 所以掉头和没有掉头其实是等价的。 所以最快的话,就是每个蚂蚁都往离自己比较近的那端走,这样是不会相遇的 。最后掉下去的蚂蚁的时间就是最快的时间。 最慢的话就

2015-12-26 20:36:47 354

原创 uva10020

题目大意: 数轴上有n个闭区间,选择尽量少的区间覆盖【0,M】思路: 小白 154页 区间覆盖问题 贪心首先,在区间外的区间需要去掉,只保存有包含在所求区间的区间。 然后将保存下来的区间从小到大排序,如果第一个区间的x大于0的话,就表示无解。否则,找到比0小的x,尽量找最长的(贪心思想,这样就可以找到最短的了),找到满足的最长的之后,新的起点设置为它的y坐标,并且忽略所有区间在y之间的部分。代

2015-12-26 19:55:09 304

原创 关于lower_bound 和upper_bound

在uva10487 中我用到了这个函数,所以就去看了一下这个函数。。大神介绍的: STL中的每个算法都非常精妙,接下来的几天我想集中学习一下STL中的算法。  ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于

2015-12-26 18:55:34 1141

原创 逆序对数的计算

使用“分治三步法” : 划分,递归,合并。类似与归并排序,我们只看右边的元素,计算右边的元素的逆序对。当右边的数组A中的一个元素j要合并到T数组中去的时候 左边数组中还没复制到T数组中的元素都是比A[j]还要大的元素。 只要把总数/2 - 左边已经合并的元素就是对于A【j】存在的逆序对数的个数。

2015-12-26 18:44:57 887

原创 uva310

题目大意:有四个字符串,第三个字符串出现a的地方用第一个字符串替代,出现b的地方用第二个字符串替代,然后判断在新串中是否可以找到目标字串(第四个字符串),如果可以找到的话就输出YES,否则输出no。思路: 本来就是想说先将新串给存在一个string中然后用string的find函数查找字串,可是wa了。。include using namespace std;include include str

2015-12-22 00:02:01 318

原创 uva10085

题目大意: 这一题跟八编码的题目有些类似,但是它并不是求目标状态,它所求的是可以达到的最远的那个图。思路:第一次接触这样的题目,看了题解才过的。 使用到了哈希判重和bfs,还需要递归的打印路径。#include <iostream>using namespace std;#include <cstring>#include <stdio.h>typedef int State[9];co

2015-12-21 23:54:09 369

原创 uva10422

题目大意: 跟国际象棋中的骑士的走法差不多,是走日字型的。找到空格,从空格开始走,这题是用回溯+剪枝做的。计算它没有达到目标位置的数量,如果数量等于0的话就用一个变量保存下来值与其他同样满足的值进行比较。如果不等于0的话,它每走一步最多改变的是两个位置的状态,那么如果走了(sum+1)/2+step 是所需要走的最少的步数如果大于原来的最少值的话 就直接返回。(这一步是很重要的剪枝)代码:#inc

2015-12-21 23:50:01 558

原创 uva10603

题目大意: 给定三个水杯的容量和所要达到的目标水量,或者找不到目标水量就一直递减到找到。最后输出你最少需要倒到别的杯子的水量是多少。思路: 自己的代码TLE了,如下。 使用Bfs,还需要用到vis的二维数组进行判重,用两层for,如果i的杯子中有水的话且j的杯子中还没有满就倒入j的杯子中然后更新杯子的状态,否则不倒入。代码:include include include include inc

2015-12-21 23:44:11 569

原创 迭代加深搜搜索

对于可以用回溯法求解但解答树的深度没有明显上限的题目,可以考虑使用迭代加深搜索。 经典问题:埃及分数问题给出一个分数,比如19/45,把它写成若干个形如1/Ri的分数的和的形式,比如19/45=1/5+1/6+1/18,要求分母不能重复使用并且使用的分数的个数最少。(如果有多组个数相同的解,最后的分数的分母越小越好,这对于题目来说是次要的。) 1、分母从小到大搜索 为了避免重复搜索 2、使用

2015-12-14 19:36:43 384

原创 uva529

题目: An addition chain for n is an integer sequence <a0,a1,a2,…,am><a_0, a_1, a_2, \dots, a_m> with the following four properties: a0 = 1 am = n a0#include <iostream> // 迭代深搜using namespace std;#

2015-12-14 19:27:04 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除