
usaco
一MasonChen
这个作者很懒,什么都没留下…
展开
-
[题目] Section 2.1 The Castle(USACO)
[题目] Section2.1 The Castle[题意] 城堡由一个个的房间组成,有的房间之间存在墙,有的房间之间不存在墙。不存在墙的房间看作一个房间。给出这个城堡的地图,你的任务是算出房间数、最大的房间的大小、推倒一个墙之后最大的房间大小、要推倒的那面墙的位置。其中这个地图的表示方式有点奇葩。。1表示在西面有墙,2表示在北面有墙,4表示在东面有墙,8表示在南面有墙,而用他们的和表示这个房原创 2014-09-01 20:20:19 · 682 阅读 · 0 评论 -
USACO 修理牛棚
同样是一道贪心题,我的思路是用一个数组存下所有的空挡,对空挡进行排序,然后再在总长度中减去前m-1大的空档长度。 关键还是理解题意。。貌似洛谷oj不支持INT_MIN之类的。。还有要对初始数据排一次序,害我wa了一次。。。。#include#include#includeusing namespace std;bool cmp(int a,int b){ if(a>b)原创 2014-03-23 01:00:36 · 1009 阅读 · 0 评论 -
USACO Section1.3 混合牛奶
我对贪心的理解就是通过每一步的最优解找的整体的最优解。往往通过一个循环语句即o(n)的复杂度来解决问题,所以资料上总说贪心算法往往是所有算法中最快的。另外贪心往往用到排序,所以sort的用法要记牢,不管对数组还是结构体。。具体到这个题就要先依据单价进行排序,这里就要求要把数据保存为结构体形式。然后从价格最低的牛奶开始买,直到满足需求。在对最后超出的处理时,要以为判断依据,否则即满足需求时,原创 2014-03-23 00:56:54 · 758 阅读 · 0 评论 -
USACO Healthy Holsteins(二进制枚举子集)
题目大意:牛的成长需要V种维他命,原创 2014-07-31 09:33:02 · 850 阅读 · 0 评论 -
USACO 黑色星期五
题目大意就是给出一个年份,求从1900年到这一年的每月13号落在一星期之中每天的次数。注意要判断某年是闰年或者平年,因为这两种年份相同月的天数不一样的。算出每个月13号距离初始日期的天数,然后再用求余运算确定星期几。这个题主要用了枚举的思想。#include using namespace std;int judge(int year){ if(year%4==0原创 2014-03-22 23:41:32 · 864 阅读 · 0 评论 -
USACO 方块转换
这个题目考察了二维数组行列之间的相互转化以及水平翻转和镜像转化。一开始我想把每个情况写成一个函数,然后再根据情况决定调用哪一个。程序是写出来了,但是不知道为什么有几种情况总是输出7。。。。然后又上网查了查,发现了更好的方法。错误代码:#includeusing namespace std;int n;char terb1[11][11],terb2[11][11];in原创 2014-03-23 00:01:33 · 774 阅读 · 0 评论 -
USACO Section1.4 n皇后问题
这个就属于深度搜索问题了,之前也做过一个深度搜索问题,感觉相同点就是在搜索函数中往往进行递归。关于n皇后问题课本上有一种解法,要适应这个题只需稍加修改。虽然我形式上明白了,但是对如何具体深搜的有的稀里糊涂的。。提交的时候最后一个数据点也就是13皇后问题超时,为1015ms,就超15ms,,,,百度了一下,找到了许多优化方法,但是还在理解之中。#include#includeusing na原创 2014-03-23 01:02:29 · 559 阅读 · 1 评论 -
[题目] Section 1.2 Palindromic Squares
[题意]给出一个整数B(2 [算法]进制转化[思路]string容器对于进行进制转化提供了很大的方便。判断是否为回文数时,用reverse()函数倒转字符串后,如果与原来的字符串相等,就说明是回文串。祥见代码。[代码]原创 2014-09-01 20:12:47 · 377 阅读 · 0 评论 -
USACO Hamming Codes
有的题只看题解,会干就这道怎么这么难啊,毫无头绪啊,但当自己原创 2014-07-31 10:40:33 · 498 阅读 · 0 评论 -
USACO 特殊的质数肋骨
深度优先搜索#includeusing namespace std;int n;void dfs(int x,int y);bool prime(int x);int main(){ cin>>n; if(n==1) cout<<2<<endl<<3<<endl<<5<<endl<<7<<endl; else dfs(0,1); return 0原创 2014-03-24 00:15:26 · 883 阅读 · 0 评论 -
[题目] Section 1.2 Milking Cows(USACO)
[题意]给出N组挤牛奶的开始时间和结束时间,求有人挤牛奶和没人挤牛的最长时长。[思路]尝试了一种“记忆”的方法,避免了复杂的判断。思路是用数组a[]标记有人挤的时间点,b[]标记没人挤的时间点。也就是说这两个数组的01情况正好相反。如果当前已被标记那么a[i]+=a[i-1],b[i]+=b[i-1]。然后遍历这两个数组分别找出最大值,这两个最大值就是答案。[代码]原创 2014-09-01 20:13:41 · 418 阅读 · 0 评论 -
USACO 贪婪的送礼者
首先要弄清楚题意,题目要求输出收到的比送出的钱多的数目。送出的也就是原来的-余下的,然后再用一个数组记录收到的,答案就是两者之差。这里最好用一个结构体来保存名字、原有的钱数和收到的钱数。#include#includeusing namespace std;char str[15];int n;struct people{ char name[15]; int mo原创 2014-03-22 23:36:42 · 1744 阅读 · 0 评论 -
USACO 挤牛奶
首先题意很清晰,给出并列的几个时间段,找出最长有人挤奶时间时间段和最长无人机乃时间段。把有人挤奶的时间标记为1,无人挤奶的时间标记为0,然后再枚举寻找。代码:#include#include#includeusing namespace std;int Time[1000010];int main(){ int start,end,sum=0,begin=10000原创 2014-03-22 23:51:50 · 757 阅读 · 0 评论 -
USACO Section1.2破碎的项链
很明显使用模拟的方法进行搜索。但是一开始只是凭感觉写了出来,有些样例没有过,仔细想想才明白自己没有完全明白怎样模拟,下面是大体思路:如果开始是一串连续的w,记录下它的数目,直到遇到一串或一个b或r,再把它们的数目加在一起,作为一次可能的结果。如果开始是一个或一串b或r记录下它的数目,直到遇到一个祸一串w,把它们的数目加在一起作为一个结果,然后在每个结果中找出最大的即可。解决头尾连续问题,只原创 2014-03-23 00:49:12 · 1948 阅读 · 0 评论 -
USACO 回文质数
开始用暴力搜索写的,提交超时,上网看了一下别人的代码,有一种思想是先计#include#includeusing namespace std;int zhishu(int a)//这个函数用来判断质数{ int i; int end=sqrt((double)a); for(i=2;i<=end;i++) { if(a%i==0)原创 2014-03-23 00:53:19 · 836 阅读 · 0 评论 -
[题目] Section 1.2 Dual Palindromes
[题目] Section 1.2 Dual Palindromes[题意]如果一个整数N在2~10进制下至少有两次是回文数,那么N就叫做双重回文数。给出两个整数N和S,找出从N开始的前S个双重回文数并输出。[思路]和上一个题基本一样。。[代码] #include #include#include#includeusing namespace std;string原创 2014-09-01 20:17:21 · 468 阅读 · 0 评论 -
[题目] Section2.1 HealthyHolsteins
[题意] 牛的成长需要V种维他命,每种维他命至少a[v]的量才能满足。现给出G种饲料,每种饲料含有b[G][V]的维他命的量。你的任务是算出至少需要哪几种饲料才能满足牛的成长。每种饲料只能用一次。输出饲料的数量及编号。[思路] 枚举各种饲料的组合,每种组合都计算一下是否满足需求,如果满足,再判断一下饲料数是不是最少。如何枚举饲料的组合呢?有两种方法,一种是通过DFS深搜,一种是通过二进制枚举子原创 2014-09-01 20:21:16 · 470 阅读 · 0 评论 -
[题目] Section 2.1 OrderedFractions(USACO)
[题意]给出一个整数N,找出一组真分数,使得他们的分子分母都不大于N.以分数形式从小到大输出这组数。[思路]不要想如何排序了,set解决!枚举所有分数,先判断是否最简,然后加入set中即可。[代码] #include#include#include#include#includeusing namespace std;struct haha{ double num原创 2014-09-01 20:19:02 · 345 阅读 · 0 评论 -
USACO1200 你的飞碟在这儿
虽然只是一道练手题,但我确实很久没做字符串的题目了,还是稍微纠结了一小会。分别先求出两个字符串所代表数字的累乘积,再判断两个积分对47求余是否相等,如果相等输出GO,否则输出STAY。另外,求字符串长度除了调用strlen函数之外还可以用“名称.size()”的方式。代码:#include#includeusing namespace std;int main(){原创 2014-03-22 23:32:23 · 649 阅读 · 0 评论