寒假训练
big up
这个作者很懒,什么都没留下…
展开
-
uva10881
题目大意: 给出一根长为L的木棍,让蚂蚁在上面爬,给出蚂蚁的初始位置和走的方向,两只蚂蚁若相遇就往相反方向走,求T时间后蚂蚁的位置。思路: 这题跟某一题也是蚂蚁的很相似,只是另外一题求的是最短时间最长时间之类的。蚂蚁相遇后反向其实等价于没有掉头,继续往前走,只是这时候不是同一只蚂蚁在走了而已,这一题蚂蚁的顺序是最开始从左到右的蚂蚁,到最后位置也是从左到右排序的。那么就可以利用这一特性做题目。代码原创 2016-01-21 11:05:24 · 542 阅读 · 0 评论 -
uva1419
题目大意: 判断一个框中是否被包含其他的框,输出没有被其他框包围的,思路: 搜索。当找到不是字母的就向下向右搜索。 然后判断这个上下长度左右长度是否相同且这个框里面是否有存在着框。代码如下。 代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>char s[105][105];i原创 2016-02-05 13:53:21 · 289 阅读 · 0 评论 -
uva1420
题目大意: 给出婚礼的开始时间和结束时间,给出n场婚礼,判断司仪是否可以主持完全部婚礼,司仪要主持的时间是总时间的一半要多一点。思路: 按照司仪要主持的时间长短排序。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <algorithm>const int N =原创 2016-02-05 14:13:30 · 236 阅读 · 0 评论 -
uva10859
题目大意: 这题教会了我一个很有用的技巧:有两个所求的值要优化,比如让a尽量小,b也尽量小那么可以转化为让x = M*a+b尽量小,其中M应该是一个比“a的最大值和b的最小值之差”还要大的数最终的答案为a = ans/M, b = ans%M回到这题,要求放的灯总数最小,被两盏灯同时照亮的边数尽量大。因为每条边要么被一盏灯照亮,要么被两盏灯照亮,所以可以转换为:求:放的灯总数量最少,被一盏灯照亮的原创 2016-01-28 20:45:05 · 505 阅读 · 0 评论 -
uva11039
题目大意: 求正负交错且绝对值递增的最长序列思路: 本来想说分成两个正负数组,然后有点类似归并排序的那种思想,可是发现好混乱。 后来看见人家是做标记的。。。太简单了。。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>int a[50000原创 2016-01-29 14:10:00 · 456 阅读 · 0 评论 -
LA3213
题目大意: 找到一个映射 使得两个字符串相同如果可以找到输出YES,反之输出NO思路: 刚开始以为一定要按顺序一一对应,发现第一组数据答案是错的,后来才知道不一定要按照顺序。 那么只需要计算每个字母的个数,比较字母个数是否一样如果全部一样就可以找得到映射。代码:#include <iostream>using namespace std;#include <stdio.h>#include原创 2016-01-29 14:47:10 · 319 阅读 · 0 评论 -
uva10970
题目大意: 求将巧克力切成1*1的最少刀数。代码:#include <stdio.h>int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { printf("%d\n",(n - 1) + n * (m - 1)); }}原创 2016-01-29 14:54:36 · 314 阅读 · 0 评论 -
LA3667
题目大意: 给出n种距离di,设计一个有m个刻度的尺子,使得每个di都可以直接量出来,要求在m尽量小的前提下保证尺子总长度尽量短。思路: 递增暴力搜索代码:#include <iostream>using namespace std;#include <cstring>#include <queue>#include <stdio.h>#include <algorithm>#def原创 2016-02-13 14:23:27 · 601 阅读 · 0 评论 -
uva1368
题目大意: 给m个长度为n的DNA序列,求一个DNA序列到所有序列的总汉明距离最小,汉明距离为不同字符的位置的个数。思路: 用贪心的方法,刚开始还以为是在给定的DNA中选出一个,可是并不是,是要求一个DNA序列可以使得它到给定的DNA序列的距离最小。每次都求出一列中最多相同的字母。代码:#include <iostream>using namespace std;#include <cstr原创 2016-01-31 13:37:05 · 2007 阅读 · 0 评论 -
uva11389
题目大意: 有n个司机,下午路线和晚上路线,现在要分别分配一条下午路线一条晚上路线给一个司机。要使得加班费最少。只要驾车时间超过d,那么多余部分一小时r元。思路: 下午最小和晚上最大搭配。贪心。代码:#include <iostream>using namespace std;#include <stdio.h>#include <algorithm>#include <cstring>原创 2016-02-03 15:14:52 · 573 阅读 · 0 评论 -
uva1418
题目大意: 题意:给n只队伍,每两队比两场,赢得3分,平1分,输0分,要选一个梦之队:赢最多,进球最多,失球最少。求梦之队最低排名。思路:考虑梦之队赢两场,其他队各赢梦之队一场,剩下都为平局,这样赢场就能保证最多。然后让一场赢球为正无穷。输球都0-1输这样,而其他队输球为输2球这样就能保证进球最多输球最少了。所以最后得分为 梦之队:赢2 输n -1 平n - 3 得分n + 3。被赢的队伍:赢1原创 2016-02-03 15:30:25 · 260 阅读 · 0 评论 -
LA2757
题目大意: 超市有n件物品,每件物品有响应的利润p和保质期d,每天只能卖出一件物品,必须得在改保质期前卖出才能赚到利润,问如何卖这些物品才能使利润达到最大思路: 按保质期升序排序,用一个cur表示时间天数,如果cur <= 保质期的话,就直接加上它的利润,当cur > 保质期的话,就不断替换成最优的。这就需要一个优先级队列,存放利润从低到高,如果发现比最低的多的就 替换掉。代码:WA了。。不太懂原创 2016-02-03 16:58:52 · 356 阅读 · 0 评论 -
LA3507
题目大意: 给出每个订单做的所需时间和最晚完成时间,求最多可以接几个订单。思路: 贪心。按截止日期排序,截止日期小的排前面,现在有一个问题,截止日期小的不一定能达到最优,有可能是(8,9),(3,10),(4,10),如果不进行处理的话,答案就会等于1 现在设置一个优先队列,队列里面存放的是那些可以完成的任务的完成时间 把当前任务的完成时间放入优先队列,如果当前任务的完成时间+当前时间原创 2016-02-03 17:45:36 · 364 阅读 · 0 评论 -
LA3882
题目大意: 从第m个开始删除,每隔k个就删除一个,求最后一个留下的。思路: 假设从0开始删除,那么没隔k个删除一个的话 f数组存的是最后留下的数字编号。 则f(1) = 0,f(n) = (f(n - 1) + k)%n 因为删除的人的后一个的编号变成了0 最后胜利的人不断+k就可以还原为原来的编号。 不过该题要求编号从1开始,只要把f[n]+1即可,同时,该题指定了第一个要删除的人必原创 2016-01-28 15:26:03 · 584 阅读 · 0 评论 -
uva357
题目大意: 有是一种不同面值的钱币,求利用这些钱币有几种方法可以给出指定的价钱。思路: 动态规划 有类似题 要扩大100倍就可以避免小数计算 数组开太小WA了一次。注意要用long long 代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>long long dp[30010][1原创 2016-02-25 17:15:09 · 545 阅读 · 0 评论 -
uva10755
题目大意: 求三维矩阵的和最大的子矩阵。思路: 和某一题求最大和的很像,只不过这一题是三维的,那一题是二维的。通过枚举开始结束的行列和层数进行降维。代码:#include <iostream>using namespace std;#include <cstring>#include <algorithm>#include <stdio.h>const int maxn = 30;co原创 2016-01-28 14:16:54 · 591 阅读 · 0 评论 -
LA3695
题目大意: 求出一个矩形可以包含的最多的星星的数量。思路: 用left数组存位于i左边的上下边界的数量,on数组存不包括上下边界的竖线上包含几个星星,用on2数组存包括上下边界的竖线上包含几个星星。边界上的星星数量就是left[j] - left[i] + on2[j]+on[i]。枚举上下边界,用一个循环求on[i] - left[i]的最大值+上left[j]+on2[j] 相当于枚举左右边原创 2016-01-28 11:39:13 · 419 阅读 · 0 评论 -
LA3029
题目大意: 求空地F的最大矩形,求最大子矩阵思路: 用三个数组up,l,r分别表示举行的高度,左边界,右边界。 lo 表示左边最近障碍格的列编号。 ro表示右边最近障碍格的列编号。 先从左到右维护左边界。 如果是有障碍的话 那么up [i][j] = 0,l[i][j] = 0,lo = j; 当i是第一行的时候 如果没有障碍的话 那么up[i][j] = 1,l[i][j] = l原创 2016-01-25 15:17:49 · 337 阅读 · 0 评论 -
uva1388
题目大意: 在一个周长为10000的圆上等距离的分配雕塑的位置,现在要插入m个雕塑,求最短移动距离可以使得插入后的雕塑的位置仍然是等距离的。思路: 求出原来的距离d0,求出插入后的距离d1,利用循环,d= i*d0知道每一个在原来的坐标系上的坐标,然后利用a = floor(d/d1),t = a * d1知道现在要插入的位置在哪,相减就是距离。代码:#include <iostream>u原创 2016-01-21 11:54:49 · 390 阅读 · 0 评论 -
uva11464
题目大意: 给出一个矩阵,说明使用最少的改变(把0变成1)使得矩阵中的每一个数的前后左右加起来都是偶数。思路: 枚举第一行,推出第二行第三行。。。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define INF 10000000int grid[20][20];int t原创 2016-01-21 15:26:54 · 789 阅读 · 0 评论 -
uva1352
题目大意: 改变最少面的颜色,使得所有立方体完全相同(存在一种旋转的方式,使得两个立方体对应面的颜色相同)暴力。。看了题解还WA了N发才过的 只因为24中姿态其中的有的写错了。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <vector>#include <al原创 2016-01-21 18:03:05 · 331 阅读 · 0 评论 -
uva11384
题目: 用最少的操作数使得所有数字都变成0。操作:选择所有或者几个整数同时减去一个正整数。思路: 利用递归的方法。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int f(int n) { return (n == 1 ? 1 : f(n/2)+1);}int main原创 2016-01-21 18:13:52 · 564 阅读 · 0 评论 -
uva10795
题目大意: 汉诺塔。移动最少步数到达目标状态,大的一定要在小的下面,不能压在小的上面。思路: 首先,考虑需要移动的编号为K最大的盘子。将K-1的盘子移动到不是目标也不是起始的那根柱子上,成为参考局面。 让起始状态和目标状态都变成参考局面,然后步数就是两者相加再加1,加1是由于还要把第K个盘子移到目标柱子上。 中转的柱子编号为6 - start - finish,6是由于1+2+3 = 6。原创 2016-01-21 23:04:28 · 699 阅读 · 0 评论 -
uva11210
题目大意: 求出所有可以听的牌思路: 暴力枚举,回溯代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>const char *mj[] = { "1T", "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", "1S", "原创 2016-01-22 15:34:07 · 500 阅读 · 0 评论 -
uva12124
题目大意: 组装一台电脑,每个配件都需要买一个,总价格不可以超过b,且品质最差配件的品质因子要尽量的大。思路: 最小值最大化的问题,用二分法,二分法分的是最低的品质因子的范围,判断函数写的是所有的品质因子大于k的时候是否可以组装成电脑,如果可以的话就继续往品质因子大的取,如果不行就要往小的取。代码:#include <iostream>using namespace std;#include原创 2016-01-22 16:24:35 · 547 阅读 · 0 评论 -
uvaLive3635
题目大意: 分pie给小朋友,有N个派,F+1个小朋友,求每个小朋友可以分到的最大的派,派不可以是拼凑起来的。思路: 由于受到了上一题(组装电脑)的影响,所以这一题看起来感觉类似,也想着用二分做,二分出每个小孩子可以分到的派的大小,然后判断这个大小是否可行。只需将每个派的面积处以这个大小,所有的值加起来看是否大于F+1。代码:#include <iostream>using namespace原创 2016-01-23 14:59:57 · 526 阅读 · 0 评论 -
uva11520
题目大意: 填充.的位置,使得与它上下左右的都不一样,而且填充完的字符串连起来要在字典序中最小。思路: 直接暴力枚举出26个字母可以填入哪个,因为是从A-Z所以肯定可以保证其在字典序中最小。(从左往右,从上往下)代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int n;char原创 2016-01-23 15:28:53 · 398 阅读 · 0 评论 -
LA3902
题目大意: n台机器连成一个树状网络,其中叶节点是客户端,其他结点是服务器。目前有一台服务器正在提供VOD服务,虽然视频本身质量不错,但对于那些离它很远的客户端来说,网络延迟却难以忍受。你的任务是在一些其他服务器上也安装同样的服务,使得每台客户端到最近服务器的距离不超过一个给定的整数k。为了节约成本,安装服务的服务器台数应尽量少。 思路:分析:把无根树变成有根树会有助于解题。本题中已经有了一个天原创 2016-01-23 17:36:30 · 470 阅读 · 0 评论 -
uva11462
题目大意: 给定很多个居民的年龄。把他们按照从小到大排序输出思路: 有内存限制不可以用快速排序,用计数排序的方法。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int readint() { char c = getchar(); while(!isdigit(c)原创 2016-01-23 17:57:56 · 371 阅读 · 0 评论 -
uva11078
题目大意: 求A[i]-A[j]的最大值,i#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int A[100005];int main() { int T,n,maxx; scanf("%d",&T); while(T--) { memset(A,原创 2016-01-24 14:30:07 · 320 阅读 · 0 评论 -
uva11549
题目大意: 一个损坏的计算机,只能显示n位,现在你用一个数K不断的平方,只能保留最高n位,求最大的那个数是多少。 思路: 数字的出现会出现循环的情况,每次记录下最大的数,当出现循环就退出,输出最大的数,用STL中的set判断是否出现重复的数字。代码:#include <iostream>using namespace std;#include <cstring>#include <std原创 2016-01-24 15:05:58 · 544 阅读 · 0 评论 -
LA2678
题目大意: 求大于S的最短连续子序列的长度代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int A[100005];int B[100005];int main() { int n,S; while(~scanf("%d %d",&n,&S)) {原创 2016-01-25 11:50:04 · 371 阅读 · 0 评论 -
uva10891
题目大意: 博弈,求A-B的得分的最大值。思路: 区间DP; 让B尽量小。 sum = A + B ;A - B = A-(sum - A) = 2 * A - sum A = sum - min(B);代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>const int ma原创 2016-01-28 17:07:44 · 611 阅读 · 0 评论