自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【USACO3.2.2】01串 位运算/二分答案

挺有意思的一个题目。说白了,就是给定一个数字K, 我能否计算出从0~K 这K+1个数字中(全部用二进制表示),  有几个数字是有1个1,有几个数字是2个1,有几个数字有3个1, 有几个数字有4个1……  这样的问题可以看成是, 有T个空格,我有K个1要插入这T个空格中。  这样的话,这个问题就转化为组合数学问题了。举个例子:对于一个二进制数字

2015-02-26 02:32:36 687

原创 【USACO3.2.1】阶乘

因为10的产生只能是2*5,(10 也是2*5产生的)也就是说,我把数字分解质因数,只分解2和5. 一个数字有几个2,几个5. 剩下的数字只保留个位,然后把个位数字全部乘起来积为P即可最后我知道有我A个2, B个5。  因为A一定是大于B的, 一个2抵消一个5. 所以答案就是(2^(A-B) * P )mod 10Compiling...

2015-02-26 00:02:49 734

原创 【USACO3.1.6】邮票 动态规划/滚动数组

bool类型:f[i][j]  i这个数额,由j个邮票贴成 是否可行。  f[i][j] = { f[i - p][j - 1] 其中有一个是true即可,p为邮票面额}换一个思路f[i]  i这个数额,最少由几张邮票组成。f[i] = min{f[i - p]} + 1    其中i的数额最高可以到达 pk也就是10000*200=200000

2015-02-25 23:43:24 603

原创 【USACO3.1.5】联系 位运算/KMP/AC自动机

吐槽:这题的输出真恶心恶心恶心恶心恶心*10000……TLE方法:暴力KMP,把所有的100 101 111之类的方案,全部和原串匹配一次…… 然后排序输出。Compiling...Compile: OKExecuting... Test 1: TEST OK [0.008 secs, 9424 KB] Test 2: TEST OK [0.003 sec

2015-02-24 23:06:12 555

原创 【USACO3.1.4】形成的区域 二维线段树/离散化/矩形切割/浮漂法 【线段树方法以后写】

方法1:浮漂法。题目意思是,后来的覆盖在前面的上面。我们可以倒过来, 从后往前。 这样后来的在上面,前面的,从下往上“浮“。要点1: 2个矩形如何判断不相交?     一个矩形的最右边,在另外一个矩形最左边。  上下同理。   (程序实现的时候,因为不知道左右上下关系,所以要4个or来判断)要点2:如何切割:红色的在上面,白色的想上浮

2015-02-18 23:24:27 1077 3

原创 【USACO3.1.3】丑数 恶心搜索题

TLE方法:依次找出丑数,从最小的丑数开始用K个素数来扩增,如果这些扩曾出的数字P,没有被加入队列,那么就加入队列。 扩增完后,当前最小丑数出队。 从下一个丑数开始扩增……我用了SPLAY,我把队列大小限制在50W以内……然后第N个出队的才是正确答案。 40W都不行…… 如果不限制队列大小,貌似计算太慢太慢…… 只能过11个测试点。Compiling...Compile:

2015-02-18 20:16:34 610

原创 【USACO3.1.1】最短网络 最小生成树

就是赤裸裸的最小生成树啊~PRIM算法:Executing... Test 1: TEST OK [0.003 secs, 3404 KB] Test 2: TEST OK [0.003 secs, 3404 KB] Test 3: TEST OK [0.003 secs, 3404 KB] Test 4: TEST OK [0.003 secs, 34

2015-02-18 13:26:49 461

原创 【USACO3.1.2】总分 背包问题动态规划

完全背包问题。f[i][j]表示用前j个物品,放满i的空间,能取得最大价值。 f[i][j] =max  f[i - a[P]]j - 1] + b[P]  j按顺序用的话,数组第二维可以压掉。即为f[i] = max f[i - a[P]] + b[P]Executing... Test 1: TEST OK [0.008 secs, 3484 KB

2015-02-18 13:09:38 543

原创 【USACO2.4.5】分数化小数 模拟

模拟手算除法= = 循环节判断才是这题恶心的地方啦。加入这里出现了425的情况。 (这题只有整数部分,小数部分都是0, 所以DE应该也是0)第二次,又在这里出现了425. 说明循环出现了~为啥? 因为425肯定后面又是补0来计算…… 所以肯定就重复了。这里判断重复的地方可以用map来

2015-02-18 01:40:06 482

原创 【USACO2.4.4】回家 最短路

想说:什么破题目描述。自环!?  从A -> a 距离是100的话,a -> C 距离是50. 那么 那么A->C距离是150 !题目需要把A和a看成是2个截然不同的点!然后直接做最短路即可。  这题目描述我看的也是醉了…… Test 1: TEST OK [0.003 secs, 3404 KB] Test 2: TEST OK [0.003 s

2015-02-18 00:23:18 554

原创 【USACO2.4.3】牛的旅行 最短路径

一定要注意联通两点后,新的连通块的直径并不一定是联通通过这两个点的最长距离,还可能是原来连通块的直径。因为这个,WA了好久……真心没想到Compiling...Compile: OKExecuting... Test 1: TEST OK [0.005 secs, 3724 KB] Test 2: TEST OK [0.003 secs, 3724 KB] Te

2015-02-17 22:29:47 951

原创 【USACO2.4.2】穿越栅栏 BFS爆搜

USACO的编译器好恶心,gets不让我编译过……只能getchar了//[-Waggressive-loop-optimizations]/*TASK:maze1LANG:C++*/#include #include #include using namespace std;int n, m;int exit_x1 = -1,exit_x2, exit_y1, exit

2015-02-17 17:16:33 881

原创 【USACO2.4.1】两只塔姆沃斯牛 模拟

纯粹的按照题目意思的模拟,小技巧:const int dx[4] = {-1, 0, 1, 0};const int dy[4] = {0, 1, 0, -1}; 定义方向变动数组。    改变方向的话,只要+1 再MOD 4即可。#include #include #include using namespace std;char map[12][12];

2015-02-17 13:25:29 877

原创 【USACO2.3.5】控制公司 BFS

把每个公司到每个公司,用邻接表保存。每次搜索A公司控制了哪些公司,就把A塞进队列,把和A有链接的公司的控制率加起来,超过50的,就加进队列。 最后把所有曾经进过队列的公司输出来即可。

2015-02-17 02:33:30 1211

原创 【USACO2.3.3】和为零 爆搜

直接穷举所有情况,但是要注意字典序。 这种题应该一次对…… 但是我错了2次一次是,最后一个数字我给算成两位数的十位了……一次是字典序问题……大家要注意好这2个问题就可以了……#include #include using namespace std;int n;char a[15];void dfs(int

2015-02-17 01:49:58 788

原创 【USACO2.3.2】奶牛家谱 动态规划

f[k][n]表示 用N个节点,组成深度小于等于K层的方案数。显然f[k][n] =sum( f[k - 1][p] + f[k - 1][q])  (p + q + 1 = n)最终答案即为f[k][n] - f[k - 1][n]PS:short和int运算速度差不多啊卧槽#include unsigned short f[101][201]

2015-02-17 01:20:53 1123

原创 【USACO2.3.1】最长前缀 KMP(爆内存) 暴力(居然更快还AC)

真的很奇怪,在其他OJ上交了,速度很快排到第二(最慢一个点80ms)。。但是用内存挺多的。 交USACO的时候,在用了15.8M内存的时候RE了。 我猜是限了16M内存。  看来不能省事……我得去重写了/*TASK:prefixLANG:C++*/#include #include #include #include using namespace std

2015-02-16 19:16:04 780

原创 POJ 2761 依然是平衡树

题目大意:先给定一大堆数字,(下标从1开始!!! 我当从0了,WA掉了2次!)然后给定区间[L, R]问[L,R]区间内,第K大的数字是谁。先预先读取所有区间,把区间排序。 然后保证平衡树内只有区间内的元素…… 然后每次直接把区间内的元素问题解决掉……时间复杂度略高nlogn而且n特别大,跑了5秒多2761Accepted41

2015-02-13 22:27:08 456

原创 POJ 3481 multimap / 平衡树 / splay

题目意思:0 结束系统1 K P  把一个叫K的客户,加入系统。他的优先级是P2  输出最高优先级的客户名字, 同时删掉他3 输出最低优先级的客户名字,同时删掉他想法: 平衡树,找最大值最小值即可。 C++这次我试了试multimap,挺好玩的。实际上这题也应该没重复关键字吧~iterator 迭代器的begin()肯定是最小值

2015-02-13 12:21:59 476

原创 【NOI2004】郁闷的出纳员 平衡树

PS:SPLAY依然不能一次写对…… 总会写出毛病,真是醉醉醉醉醉……这题难点在于变动工资,我们只需要变动工资K,表示工资现在增加了K。 然后如果有员工进来,【并且进的来,初始工资比最低工资高】,那么我们就把这个员工的工资,减去K这个值,加入到平衡树中。删人的的时候,只要查比【初始工资+工资变化量K】小的数字全删掉。 这里不需要一个一个删,大多数平衡树都会支持删整棵树的操作

2015-02-13 00:35:14 505

原创 【HNOI2004】宠物收养所 平衡树

其实就是查找前驱和后继的问题, 因为绝对值最小的情况,一定是前驱和后继和k的绝对值。这里处理有一个小方法, 一开始在树中加入maxnum和minnum2个值。 树有2个节点,就为空树。这样就不会有不存在前驱和后继的情况了。 同时还用到一个技巧,flag。 flag=0和1.   如果读入的是0和1,和flag相同就插入,否则就删除。 如果树的节点数量为2,那么flag^=f

2015-02-12 21:23:18 445

原创 蓝桥杯 2014 地宫取宝

问题描述  X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。  地宫的入口在左上角,出口在右下角。  小明被带到地宫的入口,国王要求他只能向右或向下行走。  走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。  当小明走到出口时,如果他手中的宝贝恰好是k件

2015-02-12 13:44:00 607

原创 2014 蓝桥杯 蚂蚁感冒

实质模型是括号配对问题,但是会不断的去掉两边的括号,同时变换内部括号。模拟什么都行……我的做法是离散化后再模拟,这样可以省事…… 因为是模拟比赛的样子在做题,所以程序特别丑,1Y, 这种水题也没啥得意的了。真的需要讲解么----离散化后得到    -1 1 -1 1 -1 1 1 1 1这样的序列最左边-1,最右边的1先去掉, 然后只剩下

2015-02-12 13:09:17 655

原创 POJ 1195 树状数组详解

这题我主要提供树状数组的讲解。如果想了解为何是lowbit的问题的话,直接从----A----以下开始看首先还是老图……大家一定见过的……这个图来吓唬一下大家当然这个图不好看那,我们换个图。看! 他们看起来就有表示的区间一样。  最低下的,显然是[1, 1]  [2,2]之类的区间倒数第二层的区间,每个区间长度都是2, 倒数第三层

2015-02-11 23:08:38 645

原创 POJ 1804 逆序对问题【分治】【线段树】【树状数组】【平衡树】

至于为何冒泡排序的次数,是逆序对的数量?这里说一下从小到大冒泡的问题。对于一个数字k(一开始在数组的k的位置), 在冒泡排序中,只有出现有一个数字在a[k]前面,并且比a[k]要大,这个数字才会交换位置。并且只会向前交换。显然,对于排序结束后的数列, a[k]前面是不会有比他大的数字了, 同时!a[k]只会和在他前面,比他大的数字交换(冒泡排序中,交换位置的判定

2015-02-11 13:15:47 741

原创 POJ 3693 重复次数最多的子串是什么?【后缀数组】

听说暴力优化0ms通关。 但是这里要说的显然不是暴力的方法~还是喜欢中等大小的字体啦啦啦~我知道论文上有讲,但是如果论文上的看懂了,你一定不会在百度搜这个了……我反正当时没看的很明白,大神的解释语言十分精简,精简到了,对于弱B的我,我就看不懂了……题目大意:一个字符串T,他可能里面有一段子串S,   S由一个S的子串P重复K次而成。比如 qwerty a

2015-02-09 20:39:28 621

原创 POJ 3264 RMQ问题 ST算法

因为之前都是线段树解决RMQ问题,省脑子……(因为写的顺手)……但是因为RMQ毕竟常数大,而且其实程序还相对ST要长…… 以前写过ST算法,但是因为每次都在纠结到底+1 呢,还是-1呢, 边界问题处理的我蛋都碎了好几次,这次重新学习了一下ST(sparse table)算法,好好的处理了这些问题的理解。ST算法:  解决RMQ问题。 RMQ问题:区间最大值,最小值问题…

2015-02-09 10:58:06 414

原创 SPOJ 705 子串个数 后缀数组

依然是论文里的题目…… 其中注意,答案要用LONG LONG保存……被坑了一下然后才过#include #include #include using namespace std;const int max_n = 50000 + 10;char s[max_n];int slen;int a[max_n], wa[max_n], wb[max_n], wv[max_

2015-02-08 23:18:08 435

原创 POJ 3261 后缀数组 可重叠的,但是要重叠K次的 最长公共前缀最长是多少

题目如题了啦。论文上的题目刷的还是蛮快的了,自从后缀数组越写越顺……再也不用担心这个那个写错了~~~今晚一定要刷完论文上的题目,这样明天就可以继续去做SPLAY的题目拉~~~#include #include #include #include using namespace std;const int max_n = 200000 + 10;int a[max_n];

2015-02-08 22:03:02 443

原创 POJ 1743 后缀数组

题目的实质就是,不可重叠最长重复字串。对于音调问题,实际上就是几个数字的 1 2 3 4 和 5 6 7 8 是一样。 也就是随便几个数字,f[i] - f[i -1] 和 f[k] - f[k -1] 是一样,就行了。也就是吧所有数字的差保存起来,求后缀数组,然后二分答案即可。 记住: 答案小于5,算无解。  (最近在学吉他,这是不是和弦的问题……楼教主懂的真

2015-02-08 21:24:19 349

原创 UVA 1297 最长回文串【裸】

题目大意:给一行字母,只有字母,最多1000个字母。 求最长回文穿,有多个情况下,输出最前面的那个。这次终于让我后缀数组不TLE了…… 哇哇哇哇哇!  我就是喜欢用线段树写RMQ……慢就慢,我不管了#include #include #include using namespace std;const int max_strlen = 4000 + 1

2015-02-08 19:32:26 573

原创 反复折腾了POJ上的后缀数组

折腾了最长回文串,和模式串的匹配问题。发现程序慢如狗!POJ 3461 TLE#include #include const int max_strlen = 1200000 + 10;char pattern[max_strlen], text[max_strlen];int sa[max_strlen], tub[max_strlen], wa[

2015-02-08 17:50:57 362

原创 TYVJ 1860 后缀数组裸题

大数据下测试后缀数组的SA和HEIGHT数组的正确性的题目。也决定了我今后的模板。 #include #include const int max_strlen = 200000 + 10;char text[max_strlen];int sa[max_strlen], tub[200], wa[max_strlen], wb[max_strlen], wv[

2015-02-08 12:41:02 585

原创 【USACO2.2.2】集合

水题,直接背包问题的方式得出所有数字加起来和的一半的解的数量,然后除以二即可。 证明略……  同时没懂为何别人的程序那么长,而且为毛我的内存又比别人多好几倍?PS:其实unsigned int就够用了,别人说要long long,其实用不着。 但是为毛我还是要更多的内存?还是多好几倍#include #include using namespace std; int n;

2015-02-04 00:42:54 513

原创 【USACO2.2.4】派对灯

挺有意思的一个题目。4个操作,要不做1次,要不不做。做2次等于没做。0次操作,这不用说了……就是不操作1次操作,我们可以执行1 ,2, 3, 4号操作2次操作,我们可以【12】 【 13】 【14】 等等。   其中包括【什么都不操作】3此操作,我们可以 123 124 …… 【1 22】, 【 2 33】,4次操作,我们只可以 【1234】, 或者【11 22】,

2015-02-04 00:37:00 735

原创 【USACO2.2.3】循环数

穷举出所有循环数,然后再判断。穷举过程,其实VIS的判断还是可以用链表的形式,这样应该就0秒秒杀了~  现在是1ms …… BSOJ上只有一个0MS,是直接打表的……#include #include bool vis[10]={0}, zhanyong[10]={0};int TOT, n;int q[10];unsigned int a[480], tail

2015-02-03 21:43:42 592

原创 【USACO2.2.1】序言页码

这题还是挺有意思的~但是会发现,其实每一位的情况都是一样的,只需要考虑个位的0,1,2,3,4,5,6,7,8,9的情况下, 1, 5, 10的使用情况。然后在两位数的时候,十位的情况其实和个位一样,只不过类推到10 50 100的使用上而已。 两位数的个位,依然和个位数的个位情况完全一样。 所以这道题就成了水题~当然我的程序还可以精简,但是我感觉精简程序好像挺麻烦的…

2015-02-03 16:01:35 596

原创 【USACO2.1.5】海明码

显然是一个搜索题……但是我的方法好像偏了? 速度是还可以,但是代码长,占用内存多。用邻接表的方式,来保存 i这个数字,到哪些数字的海明距离不到D的。  用链表的方式存储vis数组, 然后用链表的方式删除,这样穷举剩余可以使用的数字的时候速度会快很多,特别是如何求解的数量的话……但是别人好像都不是这么做的……好像直接暴力不做任何优化,虽然可能比我的慢,但是如果常数更小

2015-02-03 14:59:41 616

原创 USACO 2.1.4 Healthy Holsteins

心里感觉直接DFS也许比位运算更快, 也许是因为我没想到特别好的位运算方法……没啥好说的,直接搜就是了。(我在一个OJ上交,用了sync_with_stdio(false)的CIN版本,比scanf更快?)#include int n, m;int a[15][25], b[25];int ans[16],t=0, ans_t=25;int c[25]={0};

2015-02-03 11:58:11 660

空空如也

空空如也

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

TA关注的人

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