随笔分类 -  ACM

摘要:Sequence题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列,让你求出序列和最小的前n个序列的序列和。思路:1.将第一序列读入a向量中,并按升序排序。2.将数据读入b向量中,并按升序排序。 将a[0] + b[i] ( 0 2 #include 3 #include 4 #include 5 using namespace std; 6 7 void Solve() 8 { 9 int a[2010], b[2010];10 int t;11 int n, m;12 priority_queue,less >... 阅读全文
posted @ 2013-12-23 21:33 GLSilence 阅读(186) 评论(0) 推荐(0)
摘要:Dungeon Master大意:给你一个三维的地图,可以上下左右前后的运动,求从‘S’到‘E’的对短距离。思路: 训练计划上说是DFS,敲着敲着发现敲不动了,就BFS了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int Map[35][35][35]; 8 int s_x, s_y, s_z; 9 int b_x, b_y, b_z; 10 int e_x, e_y, e_z; 11 bool dis[35][35][35]; 12 int ans[300000]... 阅读全文
posted @ 2013-12-19 18:23 GLSilence 阅读(194) 评论(0) 推荐(0)
摘要:乘积最大的分解思路:让分解出来的因子有尽可能多的3,剩下的用2补全。最开始思路错了,WA了好长时间= =!函数中n == 1的情况应该是不用,经测试数据中没有这组。*注意用 long long 99的时候会超int的数据范围 1 #include 2 #include 3 4 long long is_(long long n) 5 { 6 if(n > 3) 7 { 8 long long a, b; 9 a = n/3;10 b = n%3;11 if(b == 1)12 retu... 阅读全文
posted @ 2013-12-13 22:56 GLSilence 阅读(279) 评论(0) 推荐(0)
摘要:棋盘问题思路:分层查找,逐行深搜。注意k 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define LL long long11 #define min(a,b) (a>b?b:a)12 #define max(a,b) (a>b?a:b)13 #define eps 1e-914 #define INF 1 n)30 return ;31 for(int i = 0; i < m; i++)32 {33 ... 阅读全文
posted @ 2013-12-13 15:49 GLSilence 阅读(289) 评论(0) 推荐(0)
摘要:Curling 2.0大意:就是要求把一个冰壶从起点“2”用最少的步数移动到终点“3”其中0为移动区域,1为石头区域,冰壶一旦想着某个方向运动就不会停止,也不会改变方向(想想冰壶在冰上滑动),除非冰壶撞到石头1 或者 到达终点 3冰壶撞到石头后,冰壶会停在石头前面,此时(静止状态)才允许改变冰壶的运动方向,而该块石头会破裂,石头所在的区域由1变为0. 也就是说,冰壶撞到石头后,并不会取代石头的位置。终点是一个摩擦力很大的区域,冰壶若到达终点3,就会停止在终点的位置不再移动。思路:DFS的水题 中间由于变量初始化放错位置了, WA了好几次。 1 #include 2 #include ... 阅读全文
posted @ 2013-12-10 19:22 GLSilence 阅读(198) 评论(0) 推荐(0)
摘要:A Knight's Journey大意:给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define LL long long11 #define min(a,b) (a>b?b:a)12 #define max(a,b) (a>b?a:b)13 #define eps 1e-914 #define INF 1 = 1 &a 阅读全文
posted @ 2013-12-09 13:05 GLSilence 阅读(276) 评论(0) 推荐(0)
摘要:ID CodesSTL知识点:给你一个字符串,求用这个字符串重新组合后,比这个字符串大的下一个字符串。例:abaacb -> ababaccba -> abc C++: next_permutation(a, a+len); 当然,prev_permutation就是求前一种排列组合的了。POJ 1146 Code: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define LL long lon... 阅读全文
posted @ 2013-12-06 20:30 GLSilence 阅读(247) 评论(0) 推荐(0)
摘要:Packets大意:给你一些包,他们的大小是 1*1,2*2,3*3,4*4,5*5,6*6, 高都是h,让你放到6*6高度为h的箱內,希望用的箱子最少思路:由于盒子和箱子的高均为h,因此只需考虑底面积的空间。6*6的盒子,每个盒子独占一个箱子。5*5的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为1*1,且最多放11个4*4的盒子,每个盒子放入一个箱子,该箱子的剩余空间允许放入的最大尺寸为2*2。3*3的盒子,每4个刚好独占一个箱子,不足4个3*3的,剩下空间由2*2和1*2填充。2*2的盒子和1*1的盒子主要用于填充其他箱子的剩余空间,填充后的多余部分才开辟新箱子装填。 阅读全文
posted @ 2013-12-04 23:21 GLSilence 阅读(267) 评论(0) 推荐(0)
摘要:Biorhythms大意:有中文翻译思路:中国剩余定理的完美诠释中国剩余定理介绍 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。具体解法分三步:找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以5的余数),同理,用70乘以2(2为最终结果除以3的余数), 阅读全文
posted @ 2013-12-04 20:44 GLSilence 阅读(303) 评论(0) 推荐(0)
摘要:Finding Nemo大意:有一个迷宫,在迷宫中有墙与门有m道墙,每一道墙表示为(x,y,d,t),x,y表示墙的起始坐标d为0即向右t个单位,都是墙d为1即向上t个单位,都是墙有n道门,每一道门表示为(x,y,d),x,y表示门的起始坐标d为0即向右一个单位表示门d为1即向上一个单位表示门再给出你起点的位置(f1,f2),并保证这个点的位置不会再墙或者门中,为起点到(0,0)最少要穿过多少条门思路:将坐标系看成网格,在这里我以每个格子的左下点为基点,那么坐标对应网格坐标(0,0)的网格为(1,1)坐标(1,1)的网格为(2,2)坐标(1,2)的网格为(2,3)...依次类推我再定义X[i] 阅读全文
posted @ 2013-11-27 16:22 GLSilence 阅读(348) 评论(0) 推荐(0)
摘要:Rectangle and Square大意:给你8个点,看里面能不能有一个正方形,一个矩形,如果有,输出YES和正方形点的编号和矩形编号,不能输出NO。PS:正方形和矩形的判断可以当做模板来使用 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define LL long long 10 using namespace std; 11 #define N 12 13 struct node 14 { 15 int x... 阅读全文
posted @ 2013-11-10 20:52 GLSilence 阅读(302) 评论(0) 推荐(0)
摘要:Monthly Expense大意:给你天数N(1 ≤ N ≤ 100,000),和每天需要花的钱(存放在数组中),让你把这些天分成M(1 ≤ M ≤ N)份(每份都是连续的天),要求每份的和最大值尽量小,输出这个和。思路:二分查找。让数组中的最大值为左界,数组的和为右界。左界的含义是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。右界的含义是将整个数组当做一块,那么最大值就是所有数字之和。那么在左右界中(含左右界)的数肯定有一个是解。二分搜索:给定一个初始数mid,从数组首元素开始叠加,超出mid那么分组数i加1,那么这么遍历一遍后能得到以mid为解所需的分组数,要是i小于M,说明 阅读全文
posted @ 2013-11-09 17:18 GLSilence 阅读(265) 评论(0) 推荐(0)
摘要:Monkey and Banana大意:把给定的长方体(不限个数)叠加在一起,上面的长和宽比下面的长和宽短,求这些长方体加起来的最高高度。思路:每个格子最多3个状态,也就是高最多有3种,也就是一共有N*3 最多90个格子,但是X和Y可以对调,那么就最多180个,对180个格子对X从小到大排序,X相等,Y就从小到大排序,那么这个问题就可以转换成类似求最大递增子序列问题一样思路的DP,DP[i]表示第i个格子时的最大值,dp[i+1]就是从前i个中找符合条件的最大的一个加上去。 1 #include 2 #include 3 #include 4 #include 5 #include ... 阅读全文
posted @ 2013-11-09 14:56 GLSilence 阅读(160) 评论(0) 推荐(0)
摘要:Largest Rectangle in a Histogram大意:找到面积最大的矩形思路:对于每一个a[i],用dp找出a[i]左边和右边连续大于自己的数的长度 l[i]表示比a[i]大的数连续的最左边的位置 r[i]表示比a[i]大的数连续的最右边的位置 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define LL __int6410 using namespace std;11 12 LL a[100010], dp_l[... 阅读全文
posted @ 2013-11-08 19:45 GLSilence 阅读(215) 评论(0) 推荐(0)
摘要:Bone Collector最基本的01背包 两种实现都要掌握的很熟练!二维数组实现01背包: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define LL long long10 using namespace std;11 12 int dp[1010][1010];13 14 void run()15 {16 int p, n, m;17 int a[1010], b[1010];18 scanf("%d",... 阅读全文
posted @ 2013-11-06 20:03 GLSilence 阅读(209) 评论(0) 推荐(0)
摘要:饭卡思路:先把最贵的一个拿出来,剩下的用背包求出最优解,用5元去买最贵的。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define LL long long10 using namespace std;11 12 void run()13 {14 int n, m;15 int a[1010], dp[1010];16 while(~scanf("%d", &n) && n)17 {18 in... 阅读全文
posted @ 2013-11-06 16:56 GLSilence 阅读(203) 评论(0) 推荐(0)
摘要:The Twin TowersLCS水题,就是题读的时候有点费劲。 我英语是渣渣- -! 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define LL long long10 using namespace std;11 12 void run()13 {14 int n, m;15 int dp[110][110];16 int a[110], b[110];17 int cnt = 0;18 w... 阅读全文
posted @ 2013-11-06 09:40 GLSilence 阅读(174) 评论(0) 推荐(0)
摘要:GCC大意:给一个n,一个m,求(0! + 1! + 2! + 3! + 4! + ... + n!)%m 0 m,那么m!+(m+1)!+...+n!这些项都是可以被m整除的,要对m求余,只需要找比m小的阶乘即可,而m的范围为1000000,在O(m)的复杂度下是可以完成的。所以只需判断n是否... 阅读全文
posted @ 2013-11-04 23:47 GLSilence 阅读(455) 评论(2) 推荐(0)
摘要:Paths on a Grid大意:矩形方格,从左下角走到右上角,只能向上或向右,问一共有多少种情况。思路:排列组合,每一个点的不同走法的总数,是由左边的点和下边的点的总数之和,这就很容易联想到排列组合的一个公式:,其中,n为走到这点所总共经过的边数(不分横边竖边),r可以看为已经走过的横边或者竖边。即有n = a + b,r = a 或者 r = b。#include #include #include #include #include #include #include #include #define LL long longusing namespace std;LL C(LL x, 阅读全文
posted @ 2013-11-04 21:18 GLSilence 阅读(261) 评论(0) 推荐(0)
摘要:Number Sequence大意:给一个有规律的序列,给你一个n,求第n位的数字是多少。最开始理解错了,理解成第n个数字是多少了,应该是第n位是多少,WA了好几遍,看了Discuss中第2147483647位答案是2,才知道是怎么回事的= =、思路:数字的位数可以用 log10((double)i) + 1 这个公式求出来,这样逐步求精就可以慢慢地求出结果了。 1 # include 2 # include 3 # include 4 # include 5 # include 6 # include 7 # include 8 # include 9 using names... 阅读全文
posted @ 2013-11-04 20:42 GLSilence 阅读(256) 评论(0) 推荐(0)