作者: yylogo

  • USACO 2.4.5 Fractions to Decimals 解题报告

    这题的话,其实也好说,就是利用余数进行判断,看代码吧: de lang="C">/ LANG: C ID: yylogoo1 PROG: fracdec / #include int num[100001]; int mod[100001]; char str[77]; int len; void add(char ch) { if(len == 76){ printf("%s\n", str); str[0] = ‘\0’; len = 0; } str[len++] = ch; } void output(int start, int end) { int i; for(i = start; i

  • USACO 2.4.4 comehome 解题报告

    这一题其实很简单,只是有个陷阱,考验你们细心与否,就是两个牧场之间可能不只有一条路径,所以这里注意一下就不会出大问题,代码如下所示: de lang="c">/ LANG: C ID: yylogoo1 PROG: comehome / #include #define INF 0xFFFFFF int map[52][52]; int getnum(char c) { if(c <= ‘a’ && c map[i][k] + map[k][j]){ map[i][j] = map[i][k] + map[k][j]; } } } } for(i = 26; i <51 i ifmin> map[i][51]){ c = i – 26; min = map[i][51]; } } printf("%c %d\n", c + ‘A’, min); return 0; } de>

  • 如果有一天,我老了

     

      如果有一天,我老了,我会在病床上静静地躺着,什么都不想了,只是静静地躺着。偶尔儿女会带着孙子孙女来看我,那时,我能做的也许只有傻傻的望着他们,什么都不想。吃着他们为我削的干净的苹果,为我吃那些三四元一碗的米粉和混沌,平平淡淡的日子,我确十分开心。但当他们离去,空荡荡的病房,又只有静静地躺着了,好好睡睡吧,也许明天日子就到头了。

      如果有一天,我老了,我会放下所有的追求和向往,安逸地在看着电视,我只会在公园里散散步,和另外一群老家伙夸奖我的孙子,赞扬我的孙女,不会再有自恋和自私了,这时候也不会有人说这是自负吧?这只是对生活,对世界的一种谧静的态度,不会再向往活的多长多长,也不会希望自己能感触一番大的事业来,只是希望后代能够帮我干出一番天地,我就可以和老家伙们虚吹,也许这是最后一次了吧。

      如果有一天,我老了,那些曾经的朋友,曾经的死党现在都还在吗?怀念起来,想哭且哭不出来,也许只是想这样的活下去,不要奢华,不要艳丽,平平淡淡地给孙子孙女下米粉,打牙祭,看着他们说说自己学校的生活和经历,看着孙子孙女喜欢看却自己看不懂的电视,那些可爱的动画片,虽然不怎么喜欢,但我还是会呆呆地看看他们,看看电视,那时可能会有一丝的感触吧,也许明天就看不到了吧。

      如果有一天,我老了,不再是风华正茂,而是人兽异面,一个普普通通的糟老头,也许儿时的事想想,却想不起来,那是会感慨记忆力的退化,会感慨时光的变迁,还会记得第一次喜欢女孩的场景吗?又还记得那时毕业的匆匆吗?又还会记得那时我上电视的时间吗?时光匆匆溜走,叹息岁月无情的变迁,多少人曾在生命中来了又还,也许明天我也要还了吧。

      如果有一天,我老了,我会站在洞庭湖畔,拉着风风雨雨几十年的老伴,说说那些我们还记得的时光,吹着海风,看着来来往往的人们,也许不会像现在感慨洞庭湖的华丽,岳阳楼的辉煌,日子一天天过,我们慢慢老去,走在熟悉而陌生的街头,回想着这条街20年前,30年前的样子,感叹科技的发达,感叹我们真的老了,也许明天我就随着街道走了吧。

      那时我不会有梦想了,不会有追求了,不会去奋斗了,只因为我老了,只因为明天一切就会结束了。静悄悄的走完了不长不短的一辈子。

      我老了,会放下手中的一切,只是去享受这生活,只是去感叹这生活,只是为了生活而生活,只是为了爱而爱,可能真的叫做以爱之名,为爱而生。

  • USACO 2.4.3 Cow Tours 解题报告

    这个题目涉及的算法真的好多好多,一下子还真摸不着头脑,但摸着没摸着都先听我说。 首先要把链接在一起的那些牧区之间的距离算出来(勾股定理),然后要把各个牧场的牧区标示出来(洪水填充),这样就能进行下一步了,再把各个节点之间的距离算出来,用floyd-warshall算法,O(n^3)的那个算法,然后,再把每个牧区在这个牧场距离最远的节点之间的距离算出来,再把每个牧场的直径算出来,这题目就大概出来了。 最后在循环两个牧区,如果是在一个牧场就退出循环,如果是在两个不同的牧场的话,那如果连接起来这个新的牧场的直径就有三种可能:a牧区所在的牧场的直径;b牧区所在的牧场的直径;a牧区在牧场中距离最远的距离加上b牧区在牧场中距离最远的距离再加上a,b之间的距离。 代码如下: / LANG: C ID: yylogoo1 PROG: cowtour / #include #include #define INF 1000000.0 int x[150], y[150]; double map[150][150]; int group[150]; int n; double getdis(int i, int j) { return sqrt((x[i] - x[j]) (x[i] - x[j]) + (y[i] - y[j]) (y[i] - y[j])); } void fool(int a, int k) { int i; if(group[a]){ return; } group[a] = k; for(i = 0; i b ? a : b; } int main(void) { int i, j, k; int ch; double max, t; freopen("cowtour.in", "r", stdin); freopen("cowtour.out", "w", stdout); scanf("%d\n", &n); for(i = 0; i map[i][k] + map[k][j]){ map[i][j] = map[i][k] + map[k][j]; } } } } for(i = 0; i

  • USACO 2.4.2 Overfencing 解题报告

    题目看了之后容易发现就是广搜,从两个入口对全图进行广搜,搜到最后一个所需要的路程就是答案,广搜实现一点儿也不难,我的实现感觉还是比较好的,用一个宏和一个函数实现这个功能,然后用数字代表前进的方向,0:北,1:南,2:西,3:东。 但这题难的地方我觉得是把图转化成数据和寻找入口,其实难也不难,只是希望实现的代码简单些。刚开始我想根据变量循环的位置来判断,但这种方法的弊端就是代码量太大,要好多好多的判断,难的写,就直接使用-和|(墙的标识。)来标记数据就可以了,发现这个实现很简单,但是麻烦的就是找入口,最后我还是用了好多代码。 最开始我是把图转化成为数组的值之后再在数组里寻找,这么实现的话可以,只是说代码要多好几行,就换了种方法,放到和读取数据的循环了(看不懂这些话就看代码吧。) 代码: de lang="c">/ LANG: C ID: yylogoo1 PROG: maze1 / #include #include #define UP 1 #define DOWN 2 #define LEFT 4 #define RIGHT 8 //为0和39都提供空间, 在程序处理中会方便些 int map[102][40]; int ways[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int queue[3800][2]; int mark[101][39]; int head, end; int w, h; void enqueue(int i, int j, int k) { if(mark[i][j]){ return; } queue[end][0] = i; queue[end][1] = j; mark[i][j] = k; end++; } void exqueue(int *a) { assert(head h || b <1 b> w){ return 0; } return 1; } int main(void) { int i, j; char ch; int t[2]; freopen("maze1.in", "r", stdin); freopen("maze1.out", "w", stdout); scanf("%d%d\n", &w, &h); for(i = 1; i <2>

  • USACO 2.4.1 The Tamworth Two 解题报告

    这题模拟的这个细节不用说把?就是俺顺序来,如果不知道的话看我的代码,这部分(deal函数)写的比较清楚,但是比较麻烦的问题是循环多久才结束呢?题目并没有说什么特殊条件那?呵呵,暗示的条件还是有的,在1010的牛和人在每个格子上最多就是4种方向吧?也就是说每个格子对每个人来说都有400种状态,那么400400就是所有的状态,如果在160000种情况都没有相遇的话那么一定是在死循环中间(即死追死跑。) 代码如下: de lang="c"> / LANG: C ID: yylogoo1 PROG: ttwo / #include int map[10][10]; int c[3], f[3]; int way[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; int check(int a, int b) { if(a <0 b a>= 10 || b <= 10 || !map[a][b]){ return 0; } return 1; } void deal(int k[3]) { int t[2]; t[0] = k[0] + way[k[2]][0]; t[1] = k[1] + way[k[2]][1]; if(check(t[0], t[1])){ k[0] = t[0]; k[1] = t[1]; }else{ k[2] = (k[2] + 1) % 4; } } int main(void) { int i, j; char ch; freopen("ttwo.in", "r", stdin); freopen("ttwo.out", "w", stdout); for(i = 0; i <10 i forj="0;" j j ch="getchar();" switchch case mapij="1;" break case C c="i;" c="j;" mapij="1;" break case F f="i;" f="j;" mapij="1;" break getchar fori="0;" i i ifc="= f[0]" c="= f[1]){" break dealc dealf printfdn i return code>

  • USACO 2.3.5 Controlling Companies 解题报告

    读取a公司控制b公司的股份c,再把这个股份加给所有控制a的公司上,如果可以产生控制一个公司的情况,那么就控制该公司,并且把其公司占有其他公司的所有股份都自己加一份,如果有可以控制的情况,那么继续控制。 代码如下: / LANG: C ID: yylogoo1 PROG: concom / #include #define MAX 101 int have[MAX][MAX], con[MAX][MAX]; void con(int a, int b) { int i; if(con[a][b]){ return; } con[a][b] = 1; for(i = 1; i 50){ con(a, i); } if(con[b][i]){ con(a, i); } } } void addcent(int a, int b, int c) { int i; for(i = 1; i 50){ con(i, b); } } } } void init(void) { int i; for(i = 1; i

  • mount -n 的用途

      鸟哥的书上有这么一个例子,当计算机出问题了,当/etc只读时怎么挂载根目录,它用的指令是mount -n -o remount,rw / ,那么这个mount -n是什么意思呢?