随笔分类 -  其他

摘要:题意:给定一个两个数M,N,表示有N个1,N个2,一直到N个M,现在要求将这些数排列成一个M*N的矩阵,使得任意一行的两个相邻值差值不大于1,每一列没有两个相同的数。解法:直接输出M,M,M-1,M-1...这样的一个序列之和即可。代码如下:#include <cstdlib>#include <cstdio>#include <algorithm>#include <iostream>using namespace std;int M, N;int main() { while (scanf("%d %d", &M, 阅读全文
posted @ 2013-06-08 13:42 沐阳 阅读(388) 评论(0) 推荐(0) 编辑
摘要:题意:三维子矩阵最大和。解法:枚举三维的平面两维,然后将第三维转化为线性求解,时间复杂度O(n^5),这题被读入数据方位坑了,绝对值不超过2^31,负数没有问题,int形最大正整数是2^31-1...... 导致一直WA,欲哭无泪。代码如下:#include <cstdlib>#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;typedef long long LL;const LL INF = 1 阅读全文
posted @ 2013-05-31 12:10 沐阳 阅读(618) 评论(0) 推荐(0) 编辑
摘要:题意:就是最小生成树,题中给定了一条必须要连接的边,排序的时候不把他考虑进去即可。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#include <cmath>using namespace std;int N;struct Point { int x, y;};struct Edge { int a, b; double dis; bool operator < (co 阅读全文
posted @ 2013-05-29 21:06 沐阳 阅读(326) 评论(0) 推荐(0) 编辑
摘要:这次真的很挫,写了三题竟然只过了一题,cf的数据强是一方面,再者也发现自己写代码时的一些细节部分没有注意,过来改了昨天两天代码都很快AC了。A.Strange Addition这题只需要处理几种情况就可以了,100和0必须取,其他如果同时出现X0和X这样的数就取两个,否则XX、X、X0取中间任意一个。代码如下:#include <iostream>#include <cmath>#include <cstring>#include <cstdio>#include <string>#include <stdlib.h>#i 阅读全文
posted @ 2013-05-20 09:11 沐阳 阅读(295) 评论(0) 推荐(0) 编辑
摘要:题意:给定一个函数定义如下:对于q个点满足:给定f[1]-f[n]的数值,然后存在q个特殊的点,其于前面的关联的项数特殊,系数特殊,当然位置也特殊。现在要求f[n]的值。解法:如果题目中没有强调q个特殊点的话,那么可以使用矩阵快速幂搞出来。鉴于只有最多100个特殊点,我们可以选择分段进行处理,对每一个空隙进行一次矩阵快速运算,然后对于特殊点单独做一次。这里又有一个地方要特别注意:那就是q个点中有位置大于n的点。当然仅仅是一般的矩阵快速幂这题的复杂度将达到O(q*log(n)*L^3),结合多组数据这样会超时,一个优化就是使用一个列向量去依次乘以若干个矩阵,那么每一次相乘的复杂度就变成了L^2, 阅读全文
posted @ 2013-04-28 19:53 沐阳 阅读(464) 评论(0) 推荐(0) 编辑
摘要:题意:有很多只蚂蚁在一条直线上,每个蚂蚁移动速度都是1,并且有一个初始方向。并且当相邻两个蚂蚁相撞时转向。现在问t时间后各个蚂蚁的位置。解法:这题的一个致命技巧就是把两只蚂蚁的相撞看作是两只蚂蚁交换穿过对方并且交换蚂蚁的编号。这个是很好理解的,类似于物理的完全弹性碰撞。又由于任何两只蚂蚁的相对位置在这种转弯的情况下不会改变相对位置,因此我们只要视作所有蚂蚁没有蚂蚁的行动。最后根据位置关系对应到原始的位置关系。最后再做位置判断的时候查看是否超出坐标之外即可。代码如下:#include <cstdlib>#include <cstring>#include <cstd 阅读全文
posted @ 2013-04-26 22:16 沐阳 阅读(694) 评论(0) 推荐(0) 编辑
摘要:看了下面这篇文章后就恍然大悟了,不得不佩服解题方法的精妙之处。http://blog.csdn.net/wh2124335/article/details/8739097题目大意:在第一象限中给出若干矩形(点范围1e5,矩形个数20000),现在给出一些询问(次数20000),每次询问给出一个整数t,问在(0,0)到(t,t)范围的矩形面积和。解题思路:考虑每次询问t,对于单一矩形的面积的计算方法~对于询问t。计算如图矩形所被包含的面积可以用矩形面积S[TCFI]-S[TJGI],而S[TCFI]=(t-Fx)*(t-Fy);S[TJGI]=(t-Gx)*(t-Gy)换句话说就是用[T和矩形左 阅读全文
posted @ 2013-03-30 15:31 沐阳 阅读(581) 评论(0) 推荐(0) 编辑
摘要:题意:已知A0 = 0 , A1 = 1 , An = 3 * An - 1 + An - 2 (n >= 2). 求 AAAAN Mod (1e9 + 7) (也就是A[A[A[A[N]]]])。解法:标程竟然使用set+pair来寻找循环节,并且第一次循环节长达222222224,不知道内存要吃掉多少。由于是一个嵌套的定义,因此要找出每一层的循环节,最终推出最内层的循环节为240,次之为183120,再之222222224,最后就是1e9+7了。通过矩阵快速幂求解第x项还是飞快的,注意当某一层为0时最后的结果就为0了。代码如下:#include <cstdlib>#inc 阅读全文
posted @ 2013-03-20 19:07 沐阳 阅读(545) 评论(0) 推荐(0) 编辑
摘要:题意:求出两点的距离。解法:由于有一种情况相加将超出long long的最大表示范围,由于计算机将减法都视作是加法,因此溢出之后的值如果使用无符号格式控制符来输出的话,结果是对的。代码如下:#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int main() { int T; scanf("%d", &T); while (T--) 阅读全文
posted @ 2013-03-19 17:14 沐阳 阅读(226) 评论(0) 推荐(0) 编辑
摘要:D.求体积题意:给定一个从中间挖去了一个圆柱(上下面是球的弧面)的球,告诉了剩下圆柱的高(可以看做是球剩下的高度),求球的体积是多少。解法:由于只给定了高度,所以存在不同半径的球都能够达到这个高度的要求,所以假设一个极端情况,那就是球的直径刚好等于已知的H,那么中间的圆柱就不用挖去了,所以剩下的就是球的体积。可惜还是不能够证明出为什么会这样。代码如下:Problem D#include <cstdlib>#include <iostream>#include <cmath>#include <iostream>#include <cstdi 阅读全文
posted @ 2013-03-11 20:48 沐阳 阅读(351) 评论(0) 推荐(0) 编辑
摘要:插入排序: 时间复杂度O(n^2), 辅助存储空间O(1), 稳定排序插入排序#include <stdio.h>#include <stdlib.h>int A[10000];void insertsort(int a[], int p, int r) { int i, j; for (i = 2; i <= r; ++i) { a[0] = a[i]; // 作为元素的备份和起到监视哨的作用 for (j = i-1; a[0] < a[j]; --j) { a[j+1] = a[j]; } a... 阅读全文
posted @ 2013-01-13 14:27 沐阳 阅读(318) 评论(0) 推荐(0) 编辑
摘要:搜索+剪枝#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#define MAXN 5005using namespace std;/*题意: 给定一个行数和列数固定的网格,再给定若干个点,这些点是使用矩形上网格线交叉点的 坐标来唯一确定的R行C列的网格,左上角的坐标为(1,1)右下角的坐标为(R,C),问给定的 这些点能够组成最长可能路径是多长. 路径的定义的如下的:由若干连续且间隔相等的 点组成, 阅读全文
posted @ 2013-01-12 22:45 沐阳 阅读(471) 评论(0) 推荐(0) 编辑
摘要:Problem A:(HDU 1040)题意:给定数据组数T,然后对于每一组数据,首先输入一个N,表示该组共有N个数,后面跟N个数字,要求输出.插入排序#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXN 1005// MAXN要定义的稍微大一点,防止数组越界 /*该题数据较小,所以一般的排序的算法应该都可以AC此题 */int N, seq[MAXN];void insertsort(int m, int n) { // 带了个区间 for (int i = m+1; i 阅读全文
posted @ 2013-01-12 16:12 沐阳 阅读(259) 评论(0) 推荐(0) 编辑
摘要:该题题意很简单,题目中定义了丑数的概念,即这个数只有2,3,5这几个因子,现在要我们输出前1500个丑数的任意一个.前面没想到好的方法,直接想着打表了,前面700个能够在线跑出来,后面的就打了个表.#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;bool is(int x) { while (x % 2 == 0) x /= 2; while (x % 3 == 阅读全文
posted @ 2013-01-10 21:50 沐阳 阅读(388) 评论(0) 推荐(0) 编辑
摘要:题意:给定一个数N (10 <=N <= 30),然后给你N个数,这N个数由0和1组成,这N个数可以看做是一个环.然后现在又一种操作,可以将连续的三个数进行翻转,也可以将整个序列顺时针旋转一圈.现在问是否存在通过一个操作来是的实现将所有的1都靠在一起.这题刚开始分析的时候只注意到连续的三个数的8种组合情况,然后只有四种情况是在翻转过程中产生变化的.但是这样的想法还是没有多大帮助.实在是不会了.因为我的整个思路在于去构造一个方法能够使得所有的1都连在一起.而题目只要我们输出YES或者是NO.参看了题解后恍然大悟:这里只要从奇偶性方面去思考就可以了.当我们从奇偶性去看一个状态的时候,最 阅读全文
posted @ 2013-01-06 18:57 沐阳 阅读(344) 评论(0) 推荐(0) 编辑
摘要:du熊学斐波那契ITime Limit : 2000/1000ms (C/Other)Memory Limit : 65535/32768K (C/Other)本次组委会推荐使用C、C++Problem Descriptiondu熊对数学一直都非常感兴趣。最近在学习斐波那契数列的它,向你展示了一个数字串,它称之为“斐波那契”串:11235813471123581347112358........聪明的你当然一眼就看出了这个串是这么构造的:1.先写下两位在0~9范围内的数字a, b,构成串ab;2.取串最后的两位数字相加,将和写在串的最后面。上面du熊向你展示的串就是取a = b = 1构造出来 阅读全文
posted @ 2012-12-13 15:11 沐阳 阅读(488) 评论(0) 推荐(0) 编辑
摘要:题意:给定一个完全图,现在要求将这个图划分成两个部分,求两个部分的点做笛卡尔积之后的点对的距离和最大值是多少。解法一:由于给定的点最多只有20个,所以直接2^N*O(n)的时间复杂度枚举即可。解法二:采用随机化算法,枚举某一个点,将这个点所属于的集合进行翻滚。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <iostream>using namespace std;int N, G[25][25];int cal(int x) { int A[25], B[25 阅读全文
posted @ 2012-11-19 21:09 沐阳 阅读(289) 评论(0) 推荐(0) 编辑
摘要:看了公式之后k的值来源是i或者是j,那么枚举 i = k 的时候满足(j < i)同理 j = k 的时候满足(i < j) 最后在加上i,j都是k。求一个前缀和。注意处理溢出。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#define MOD 1000000007using namespace std;int N;long long sa[100005], sb[100005];int cal(int x) { return 阅读全文
posted @ 2012-11-18 14:42 沐阳 阅读(208) 评论(0) 推荐(0) 编辑
摘要:给定一个集合A,一个集合B,A,B元素个数相等,然后问是否存在一个数X使得A中的元素均与这个数进行按位异或操作后的结果为B集合,如果存在输出最小的数,不存在输出-1。思路:由于给定的N为奇数,所以能够根据二进制位的最右边位确定唯一的分组,然后只需要判定这个分组是否合理即可。分组是这样划分的,如有A、B两组数据,把A组根据末位0和1分成两组,B组同理划分,那么只有00配对或者是01配对,这有各组中数的个数确定。配对模式确定后,再通过30次判定即可。#include #include #include #include #include #include using namespace std;c 阅读全文
posted @ 2012-11-18 14:34 沐阳 阅读(324) 评论(2) 推荐(0) 编辑
摘要:这题大概题意是这样的,给定log2(x + y) = A 以及 log2(x - y) = B,现在要求出log2(x)是多少。首先这题中给定的A、B的范围是骗人的,实际上A、B的差值不能够大于1024,否则就不能够使用pow函数,不知道这种方法是不是错了。首先有log2(x) = Min(A, B) - 1 + log2(2^|A-B|+1)那么我们就能够估计这个值的范围是[Min(A, B) - 1 + |A-B|, Min(A, B) + |A-B|],我们对log2(2^|A-B|)这个式子进行二分求值,最后得到结果。这题的二分真是诡异,明明最后边界L和MID的差值是小于10^-8的, 阅读全文
posted @ 2012-11-12 20:42 沐阳 阅读(453) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示