USACO
文章平均质量分 72
CMTM4
ACM退役
展开
-
USACO Shaping Regions(二维线段树做法 原USACO3.1.4?还是3.4.1?)
题目大意:给定一个矩形,每次选出一个矩形覆盖上颜色K,最后问你每个颜色有多少个。(后上色的,会覆盖掉之前上色的)而为线段树会炸内存,而且很慢。所以只能当练手了。首先离散化所有坐标,构建二维线段树。因为树套树不能动态标记,只能永久标记,所以我们读入后,把数据倒着处理。先进树的,可以让后进树的进不去。我们假设树套树一开始做的是X树,后来在X树的节点上,有原创 2016-08-18 09:45:11 · 346 阅读 · 0 评论 -
【USACO3.3.2】商店购物 状态压缩动态规划
节约空间我自然用了滚动数组…… 偷懒用指针来实现滚动了。用二进制标志状态。 因为最多只买5种商品。所以f[][][][][] 每一维空间表示每个商品购买的情况,这里只说一下二维的情况 f[i][j] = f[a][b] + a[p] 其中: b[p]+a = i c[p] + b = j说白了,就是用几维空间, 第一维,就是第一个商品的原创 2015-03-22 16:06:01 · 628 阅读 · 0 评论 -
【USACO3.2.3】纺车的轮子 模拟
按照题目意思模拟……而且因为旋转360度一定会重复,所以只要模拟旋转360次,每次CHECK一下是否符合要求即可。Executing... Test 1: TEST OK [0.003 secs, 3364 KB] Test 2: TEST OK [0.005 secs, 3364 KB] Test 3: TEST OK [0.005 secs原创 2015-03-10 00:35:05 · 430 阅读 · 0 评论 -
【USACO3.2.5】魔板 康托展开/BFS
我A*然后错了! 其实我不知道我的A*哪里错了…… 但是不管了,以后再练A*好了。题目思想: 任何一个全排列数字,可以用康拓展开的知识,来映射到一个数字上去。 http://zh.wikipedia.org/wiki/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80WIKI有详细的讲解。当然,用散列函数也可以让全排列数字能有映射效果原创 2015-03-10 00:24:14 · 881 阅读 · 0 评论 -
【USACO3.2.4】饲料调配 纯整数高斯消元
其实就是高斯消元。 但是常数项未知,但是常数项一定是题目给定的常数的整数倍(K倍),所以要穷举一下这个K,然后做高斯消元。但是如何判断NONE呢?省事,多循环几次,一直不出解,就是无解了。最近得写一个高斯消元的模板了……/*TASK:ratiosLANG:C++*/#include #include #include u原创 2015-03-17 01:58:37 · 1573 阅读 · 0 评论 -
【USACO3.3.1】骑马修栅栏 欧拉路
欧拉路问题。有回路,有纯粹的欧拉路。欧拉路算法:所有点的入度出度有一个特殊的关系。假如不是欧拉回路,只是欧拉路,那么…… 一个点的出度=入度+1 就是起点 入度=出度+1 就是终点假如是欧拉回路,那就随意了。欧拉路的遍历,需要后序遍历,倒序输出。 如果用前序遍历,正序输出, 会出现一个如下原创 2015-03-20 10:23:58 · 605 阅读 · 0 评论 -
USACO 2.1 Sorting a Three-Valued Sequence
最快的方法当然是O(n)了先桶排一下,知道多少个1,多少个2,多少个3. 这样我就知道,有多少个2和多少个3在1的位置上~a[i][j]表示,在有多少个i在j的位置上那么如果tmp = min(a[i][j] , a[j][i]), 显然至少要tmp次才可以把他们这一组数组交换位置。那么就要进行那么几次配对,把可以直接交换位置的全部交换完毕。 这些是不可能原创 2015-01-25 12:22:00 · 340 阅读 · 0 评论 -
USACO 2.1 Ordered Fractions
Executing... Test 1: TEST OK [0.005 secs, 3564 KB] Test 2: TEST OK [0.005 secs, 3564 KB] Test 3: TEST OK [0.005 secs, 3564 KB] Test 4: TEST OK [0.005 secs, 3564 KB] Test 5: TEST OK [0.0原创 2015-01-25 11:24:15 · 329 阅读 · 0 评论 -
USACO 2.1 The Castle
BFS用洪水填充染色。 记录每个颜色的房间数量 然后按照从下往上,从左往右的顺序穷举一边,拆掉墙,如果墙两边的房间颜色相同,跳过。 颜色不同,把颜色所代表的房间数量相加,和答案对比,更新答案即可。Compiling...Compile: OKExecuting... Test 1: TEST OK [0.008 secs, 3572 KB] Test 2:原创 2015-01-25 10:45:25 · 423 阅读 · 0 评论 -
【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 · 722 阅读 · 0 评论 -
USACO 1.4 Checker Challenge 位运算
Test 1: TEST OK [0.003 secs, 3372 KB] Test 2: TEST OK [0.003 secs, 3372 KB] Test 3: TEST OK [0.003 secs, 3372 KB] Test 4: TEST OK [0.003 secs, 3372 KB] Test 5: TEST OK [0.003 secs, 3372 KB原创 2015-01-24 10:50:07 · 584 阅读 · 0 评论 -
【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 · 579 阅读 · 0 评论 -
【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 · 513 阅读 · 0 评论 -
USACO 5.3 Network of Schools
tarjan标准题。 直接tarjan即可。思考一个问题:添加多少个边让图变为连通图。 Test 1: TEST OK [0.003 secs, 3512 KB] Test 2: TEST OK [0.003 secs, 3380 KB] Test 3: TEST OK [0.003 secs, 3512 KB] Test 4: TEST OK [0.005原创 2015-01-22 23:20:07 · 442 阅读 · 0 评论 -
USACO 1.4 Prime Palindromes
构造所有回文再判断。 时间不完美。Executing... Test 1: TEST OK [0.024 secs, 3504 KB] Test 2: TEST OK [0.027 secs, 3504 KB] Test 3: TEST OK [0.027 secs, 3504 KB] Test 4: TEST OK [0.024 secs, 3504 KB] T原创 2015-01-24 00:18:35 · 388 阅读 · 0 评论 -
USACO 1.4 Mother's Milk
记忆化搜索即可……f[i][j][k]表示这个状态是否到达过……/*TASK:milk3LANG:C++*/#include #include using namespace std;bool f[22][22][22] = {0};bool ans[22] = {0};int A, B, C;inline void change(int &a,int &b,原创 2015-01-22 19:11:06 · 340 阅读 · 0 评论 -
USACO以前的1.3.3 [calfflac] manacher算法
manacher算法原创 2015-01-05 18:29:15 · 528 阅读 · 0 评论 -
【USACO3.2.6】香甜的黄油 最短路径
按照题目意思,就是求: 从K点开始,到所有点的最短路径之和。穷举K即可。 最短路算法,我用的是SPFA。SPFA+SLF优化:Compiling...Compile: OKExecuting... Test 1: TEST OK [0.005 secs, 3508 KB] Test 2: TEST OK [0.003 secs, 3508 KB]原创 2015-03-18 01:58:45 · 622 阅读 · 0 评论 -
【USACO3.3.3】亚瑟王的宫殿
1、计算所有点,到所有点的最短路径。 (马步), 国王的步伐可以O(1)计算。 2、穷举国王要被“接”的位置。 PS:被接送的位置,和国王原来位置,距离不会差太远。 具体差多远…… 我没证明,我猜是33、穷举国王和骑士的会和地点4、穷举所有的骑士, 骑士i来接送国王5、特判:没有骑士来接送国王注意: 1、RC分别为高和宽2、可能会出现骑士无法到达汇合点的情原创 2015-03-23 21:41:28 · 932 阅读 · 0 评论 -
POJ 3669 Meteor Shower 挑战P135
题目大意:给定一些点,这些点会在t时刻被毁灭。 同时,这个点上下左右4个点也被毁灭了。问从(0,0)点出发,多久可以到一个安全的点。我们可以计算出地图上所有的点, 被毁灭的最早时刻 TIME[i][j] 表示(i,j)这个点,在TIME[i][j] 以后,就变的不可访问了。那么我们可以从(0,0)开始BFS,记录g[i][j]表示到(i,j)这个点,最早可以原创 2016-05-19 21:53:56 · 344 阅读 · 0 评论 -
【USACO4.3.2】素数方阵 搜索搜索!
Executing... Test 1: TEST OK [0.035 secs, 4000 KB] Test 2: TEST OK [0.032 secs, 4000 KB] Test 3: TEST OK [0.084 secs, 4264 KB] Test 4: TEST OK [0.105 secs, 4264 KB] Test 5: TEST OK [0.1原创 2015-05-17 02:35:03 · 1968 阅读 · 0 评论 -
【USACO4.1.2】栅栏的木料 爆搜剪枝优化
Executing... Test 1: TEST OK [0.005 secs, 3392 KB] Test 2: TEST OK [0.005 secs, 3392 KB] Test 3: TEST OK [0.008 secs, 3392 KB] Test 4: TEST OK [0.097 secs, 3392 KB] Test 5: TEST OK [0.0原创 2015-05-07 13:53:26 · 965 阅读 · 0 评论 -
USCAO 4.3.1 buylow 动态规划-高精度
第一问:显然是最长下降子序列f[i] = max {f[j] + 1 } a[i] 这样就可以得到第一问的解。先不考虑题目的限制条件,也就是方案重复的情况, 假如方案可以重复,有多少个解?ans[i] = sigam {ans[j] } 其中f[j] + 1 == f[i], 同时a[i]>a[j]加上限制条件,要怎么办呢? 如何去掉重复的情原创 2015-05-16 16:36:43 · 457 阅读 · 0 评论 -
【USACO4.2.4】奶牛自行车
其实是个水题,就按照题目意思来。但是我题目意思看错了3次…… 写了3个多小时……Executing... Test 1: TEST OK [0.008 secs, 3396 KB] Test 2: TEST OK [0.095 secs, 3396 KB] Test 3: TEST OK [0.054 secs, 3396 KB]原创 2015-05-16 01:42:22 · 809 阅读 · 0 评论 -
【USACO4.2.2】完美的牛栏 二分图的匹配
裸二分图匹配/*TASK:stall4LANG:C++*/#include#include #include #include using namespace std;const int max_ver = 200 + 10;struct edge{ edge *next; int ver; edge(int _Ver, edge *_N原创 2015-05-16 01:41:22 · 1417 阅读 · 0 评论 -
【USACO4.2.1】草地排水 最大流
直接套用ISAP模板我的模板不一定正确…… 不能参考!!!!!/*TASK:ditchLANG:C++*/#include #include #include #include #include using namespace std;const int max_ver = 200 + 10;int n, m;struct edge{原创 2015-05-16 01:41:22 · 1269 阅读 · 0 评论 -
【USACO4.2.3】工序安排 附带官方题解翻译
先考虑第一问:贪心。如何贪心呢? 看成时间块的插入。 插入1号机器的话,时间条长度为a[1], 插入2号机器,时间条长度为a[2].类似俄罗斯方块一样~~! 然后想办法插入,使得最高的那个最低。x[i]表示,当前插了一些时间条后,第i个机器的时间条高度。 (看成俄罗斯方块!插时间条,也就是只有俄罗斯方块的很长的那个长条。) x[i]就是当前第i个位置的高度(俄罗斯方块是原创 2015-05-12 02:09:20 · 948 阅读 · 0 评论 -
【USACO4.1.3】篱笆回路 无向图最小环
题目意思就是让你求无向图最小环,但是给数据的方式非常恶心。我的用并查集+暴力的方式……先给每个边的顶点标号,然后…… 把A能到B,B也能到A的边的点,给并为一个点……然后floyd求最小环。floyd最小环我自己还不是非常理解…… 但是先用着,上课再想Executing... Test 1: TEST OK [0.00原创 2015-05-11 18:28:32 · 890 阅读 · 0 评论 -
【USACO4.1.1】麦香牛块
根据数学定理:ap + bq 不能组合的最大数字,是 qp-p-q那么可以得到结论,答案一定是最大的2个数字相乘的范围之内。 这样的话,题目就是一个简单的背包问题。那什么时候会导致没有最大不能组合的情况呢?显然有1是不行的,因为可以任意组合。还有什么情况呢?"可以算所有的数的最大公约数。如果不是1,也就是说这些数不互质,那么不被这个最大原创 2015-04-07 21:34:20 · 1499 阅读 · 0 评论 -
【USACO3.4.4】摇滚乐队
程序内注释有讲解/*TASK:rockersLANG:C++*/#include #define max(a, b) (a)>(b)?(a):(b)int n, t, m;int a[21];int f[21][21]={0};int b[21][21]={0}; int main(){ //freopen("rockers.in","r",stdin);原创 2015-04-07 21:32:50 · 673 阅读 · 0 评论 -
【USACO3.3.5】一个游戏
程序里有解释#include #include #include #include using namespace std; int n;int a[105], s[105]={0};int f[105][105]; /*f[i][j] 面对[i,j]的区间, 所能取得的最大值 显然后面对的,能取得的值就是s[j]-s[i - 1] - f[i][j]原创 2015-04-07 21:23:50 · 632 阅读 · 0 评论 -
【USACO3.4.2】美国血统
这个…… 就是给树的前序中序遍历,求后序。没啥好说的啊…… 任何一本书上都有讲解的#include #include #include #include using namespace std; int zhong[100]={0}, qian[100]={0};int zuo[100]={0}, you[100]={0};int len;原创 2015-04-07 21:30:37 · 772 阅读 · 0 评论 -
【USACO3.4.1】闭合的栅栏
第一问:其实不用考虑,没这个情况。考虑的话,就考虑所有的边之间是否有交点即可。第二问:从观测点发射一个视野,看到一个栅栏。这个发射的直线视野,一定和一个栅栏的两个顶点有关系。 能看到顶点,才有可能看到这个栅栏。那么我们可以把从观测点,到顶点连线。 得到直线L1然后把直线L1,略倾斜一个小角度,然后用来check所有的其他栅栏, 看最早看到的栅栏是原创 2015-04-07 21:24:40 · 683 阅读 · 0 评论 -
【USACO3.3.4】家的范围
动态规划f[i][j]表示 (i,j)为右下角,所围成的最大正方形up[i][j] (i,j) 上方有多少连续的区域left[i][j] (i,j)左边有多少连续的区域up[i][j] = up[i - 1][j] + 1 或者为0left[i][j] = left[i][j - 1] +1或者为0f[i][j] = min(原创 2015-04-07 21:22:25 · 672 阅读 · 0 评论 -
【USACO3.4.3】电网
皮克定理!!!程序最后有讲解/*TASK:fence9LANG:C++*/#include inline int abs(int k){if (k < 0)return -k;return k;}int n, m, p; int gcd(int a, int b){return !a ? b : gcd(b % a, a);} inline int cal2(int x原创 2015-04-07 21:31:23 · 637 阅读 · 0 评论 -
USACO 1.4 Arithmetic Progressions
这题略有点繁琐啊- - 先构造出所有的双平方数字在a数组里,p[i]表示i这个数字,在a数组的下标穷举公差……但是公差其实是有范围的(小优化一下)直接在双平方数字基础上穷举,用公差计算出的新的数字,在O(1)时间内判断出,是否还是双平方数…… 然后倒着算一下就行了。 程序自我感觉还算短……我没啥剪枝的说,下次想想。这个很慢了……别人都0.4秒Executing... Te原创 2015-01-22 17:53:55 · 387 阅读 · 0 评论 -
USACO 1.5 Superprime Rib
直接穷举一下,一边穷举一边判断…… 几乎瞬间出答案。 当然如果是比赛,打表才是最好的选择。/*TASK:sprimeLANG:C++*/#include #include int n;inline bool check(int k){ for (int i = 2; i <= sqrt(k); ++ i) if (k % i == 0) return false;原创 2015-01-24 00:37:35 · 600 阅读 · 0 评论 -
【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 · 507 阅读 · 0 评论 -
【USACO2.4.5】分数化小数 模拟
模拟手算除法= = 循环节判断才是这题恶心的地方啦。加入这里出现了425的情况。 (这题只有整数部分,小数部分都是0, 所以DE应该也是0)第二次,又在这里出现了425. 说明循环出现了~为啥? 因为425肯定后面又是补0来计算…… 所以肯定就重复了。这里判断重复的地方可以用map来原创 2015-02-18 01:40:06 · 466 阅读 · 0 评论 -
【USACO2.3.5】控制公司 BFS
把每个公司到每个公司,用邻接表保存。每次搜索A公司控制了哪些公司,就把A塞进队列,把和A有链接的公司的控制率加起来,超过50的,就加进队列。 最后把所有曾经进过队列的公司输出来即可。原创 2015-02-17 02:33:30 · 1177 阅读 · 0 评论