2011年12月14日星期三

转一段书评

from 豆瓣《我是一只IT小小鸟》


    一年多前,我到一位朋友家作客,他从学校已经毕业半年有余,没找工作,一直呆在家游手好闲。当时电视正在播电视剧《奋斗》,看了半集我问我朋友,这片子有什么好看么?而我朋友则一面严肃的表情说“你不懂,这片子特励志,不是你这种90后理解得来的”,并表示,等看完这部电视剧以后,自己马上也要开始奋斗;我没想到这种流行电视剧居然有如此“功效”,实在令我有点将信将疑。
 
  一年后,我再次拜访这位朋友,他依旧是无业流民,每天过着:上网-看电视-睡觉,三点一线的生活,还时不时跟我抱怨说,为什么别人刚毕业就有奥迪A6开,老爸一给就是两百万,用的诺基亚8800,都怪我爸妈不努力呀。
 
  我听完,心中满是唏嘘,心想,你要是一年前真的开始努力奋斗,即便现在没有大富大贵,起码也不必落得这斯田地。 

  同样地,适逢计算机专业成为最难就业专业,高校里有不知多少为仕途忧虑、对未来毫无概念的计算机专业学生,然后恰好这本书就出现了(这个时机决定了它必然是一本畅销书),那些迷惘的学生肯定是迫不及待地订购了一本,然后读到书上那些成功的学长学姐们,就如同我那位朋友看了励志电视剧一样——满腔的热血都被激发了,心中暗下目标,将来也要成为一只“小小鸟”,入主google,差一点的也要去个微软研究院什么的。 

  可是当他们实践起来的时候,才发现行动起来是如此的难,少了老师的填鸭,任何事情都变得寸步难移了:什么c/c++、java一点不会(老师还没教会我呢),linux难用得要死(之前我都是用windows的),搭个web服务器居然不能点鼠标来设置(linux的编辑器连鼠标不能用,天哪!)。。。一次次尝试之后,他们开始受挫,几次失败之后,他们放弃了,心想,都怪这本书,害我一时激动白费了那么多努力,维持现状不就够了,拿到文凭不就行了,折腾那么多干嘛? 

  励志形式的题材总会给人一种错觉,就是它们都把未来描绘得太美好了:那些读书的年轻人们,那些单纯而浮躁的年轻人们,一心只想着也给自己创造一个美好的未来,却对得到一个好的结果所要付出的代价和努力知之甚少,甚至充耳不闻。

  很多深陷泥潭的人,他们从来不去思考自身的困境,却满心期待着通过一本两本书、一部两部电视剧,希望从中得到启发,让自己脱胎换骨,那无异是痴人说梦;

  即便你真的能排除思想上的障碍,将计划付诸行动,在过个程中,也有无数这样那样的困难,挡住你前进的道路——这是一个漫长而艰苦的过程,决不是一时意气就能坚持下来的。

  你要做的,不是看几本励志书、重温几部像《奋斗》那样的片子,或者跑到小组上问像“学c++该看什么书“之类的蠢问题,而是应该把你脑子中那点渴望不劳而获的思想赶跑,把你从小到大养成的无须思考、等待答案的填鸭式教育带来的坏习惯改掉,然后,也是最最重要的——开始做实事,这就够了。

  看到满版评论都在为这本书喝彩,看到不少朋友立志成为“小小鸟”,我忽然有种毛骨悚然的感觉,毫不客气的说,我想这里面大部分人(如果不是全部的话)都会精神抖擞而去,垂头丧气而归。

  前几天一个刚大一的朋友问我一道很简单的c语言题目,我告诉他思路,说这道题用bit operator来做,他说不会,让我直接给答案,我希望他自己做出来,就跟他说我也不会你自己做,拉拉扯扯了一个多小时,最后他从网上搜出了一个答案交给老师。

  据他说,他们班上大部分人都是那么干的(每当老师从背后经过的时候总是胆战心惊),我对这群同年人有点失望,觉得学习不应该这样得过且过,随即又明白一个道理:很多时候,我们对别人的选择其实无能为力;

  开个玩笑,假如给我朋友那班的大一新生全部发一本《小小鸟》,他们就会认真对待自己的编程课吗?我想未必,因为他们本身都不愿意努力,我们对他指手划脚、好言相劝,又有什么用呢?


-------------------------------------------------------------------

个人觉得,一样东西的存在,总有它的道理,励志文学也是如此。虽然说执行力确实是另一回事,但起码会给人一个奋斗的目标。有动力,还需要持之以恒。找准方向才是第一要务。多花一点时间,思考一下人生的路,未来的路,未尝不是一件好事。技术无止境,找到真正属于自己的,适合自己的,才会事半功倍。

有时候确实会很迷茫,各种各样的技术与方向,那条才是自己的路。看过各种博客,也经常去请教师兄,始终不得其道。大概有些事,是真的要自己走过才能深有体会吧。

2011年12月10日星期六

POJ 1753 Flip Game 暴力。。。囧


这题跟先前那题基本一样,就不多说了 = =
很郁闷的是一样的题目一样的思路竟然效率还是那么低,总会有这样那样的小问题,然后debug来debug去,我勒个去啊~~~~~~
上网找了一下,用BFS + 位操作。。。。
喵的好高级 = =
队列实现的BFS。。。寒假回去恶补搜索啊囧~~


#include”cstdio”
#include”cstring“
#include”cstdlib“
char table[6][7];
char copy[6][7];
int firstline[5],count;
void change(int a,int b)
{
if(copy[a][b] == 'b')copy[a][b] = 'w';else copy[a][b] = 'b';
if(copy[a-1][b] == 'b')copy[a-1][b] = 'w';else copy[a-1][b] = 'b';
if(copy[a][b-1] == 'b')copy[a][b-1] = 'w';else copy[a][b-1] = 'b';
if(copy[a+1][b] == 'b')copy[a+1][b] = 'w';else copy[a+1][b] = 'b';
if(copy[a][b+1] == 'b')copy[a][b+1] = 'w';else copy[a][b+1] = 'b';
count ++;
}


int main()
{
int i,j,t,min = 16;
for(i = 1;i < 5;i ++)
scanf("%s",&table[i][1]);
for(t = 0;t < 16;t ++){
memset(firstline,0,sizeof(firstline));
int tmp = t,k = 1;          //WTF = =here the problem k which got me in trouble
while(tmp){                       //create a binary array
firstline[k] = tmp % 2;
tmp /= 2;
k ++;
}


memcpy(copy,table,sizeof(table));      //try to change to all white
count = 0;
for(k = 1;k < 5;k ++)
if(firstline[k] == 1)change(1,k);
for(i = 2;i < 5;i ++)
for(j = 1;j < 5;j ++){
if(copy[i-1][j] == 'b')change(i,j);
/*test function
for(int m = 1;m < 5;m ++){
for(int n = 1;n < 5;n ++)
printf("%c ",copy[m][n]);
printf("\n");
}
system("pause");
system("cls");
*/
}
for(j = 1;j < 5;j ++)
if(copy[4][j] != 'w')break;
if(j == 5 && count < min)min = count;   //mark the min


memcpy(copy,table,sizeof(table));     //try to change to all black
count = 0;
for(k = 1;k < 5;k ++)
if(firstline[k] == 1)change(1,k);
for(i = 2;i < 5;i ++)
for(j = 1;j < 5;j ++)
if(copy[i-1][j] == 'w')change(i,j);    //difference!
for(j = 1;j < 5;j ++)
if(copy[4][j] != 'b')break;
if(j == 5 && count < min)min = count;
}
if(min != 16)printf("%d\n",min);
else printf("Impossible\n");
return 0;
}

2011年12月8日星期四

POJ 2328 Guessing Game 超水 = =


这么水的题,怎么坑了那么多人呢? = =
想不懂
还有32ms的C++过的。。。囧
真不明白这什么过程弄的。。。。




#include”cstdio“
int main()
{
int max = 11,min = 0,t;
char s1[10],s2[10];
while(scanf("%d",&t) && t){
scanf("%s%s",s1,s2);       //原先用gets出问题(应该是get了\n),干脆就用这个了= =
if(s2[0] == 'h' && t < max)max = t;
if(s2[0] == 'l' && t > min)min = t;
if(s2[0] == 'o'){
if(t < max && t > min)printf("Stan may be honest\n");
else printf("Stan is dishonest\n");
max = 11;
min = 0;
}
}
return 0;
}

2011年12月3日星期六

百练 2754 八皇后 DFS经典题,递归,枚举

开始研究DFS好久也只弄懂个大概。。。。回溯是个问题。。。。
模拟起来总是有一定难度 = =!!
后来想一下,好像弄个全排列时间复杂度也不是很大啊。。。
试试枚举 = =
手写半小时,0ms AC....
囧~


代码水的可以。。。 = =
直接打表水过去了。。。。


#include”cstdio“
#include”algorithm“
#include”cmath“
#include“memory.h”
using namespace std;
int queen[8]={1,2,3,4,5,6,7,8};
int res[92][8];
int main()
{
int i = 0,j,k;
while(next_permutation(queen,queen + 8)){
for(j = 0;j < 7;j ++){
for(k = j + 1;k < 8;k ++)
if(abs(queen[j] - queen[k]) == abs(j - k))break;    //在对角线上
if(k != 8)break;
}
if(j == 7 && i < 92){
memcpy(res[i],queen,sizeof(queen));
i ++;
}
}
scanf("%d",&i);
while(i --){
scanf("%d",&j);
for(k = 0;k < 8;k ++)
printf("%d",res[j - 1][k]);
printf("\n");
}
return 0;
}




随后贴上DFS代码。。。。
导引上的解法,加了调试程序细心看了一次
感觉上效率不算太高。虽然模拟的过程是不错的,思想是值得学习的

#include“stdio.h”
#include“math.h”
#include“cstdlib”
int queenPlaces[92][8]; //存放92 种皇后棋子的摆放方法
int count = 0;
int board[8][8]; //仿真棋盘
void putQueen(int ithQueen); //递归函数,每次摆好一个棋子
int main()
{
int n, i, j;
for(i = 0; i < 8; i++){ // 初始化
for(j = 0; j < 8; j++)
board[i][j] = -1;
for(j = 0; j < 92; j++)
queenPlaces[j][i] = 0;
}
putQueen(0); //从第0 个棋子开始摆放,运行的结果是将queenPlaces 生成好
scanf("%d", &n);
for(i = 0; i < n; i++){
int ith;
scanf("%d", &ith);
for(j = 0; j < 8; j++)
printf("%d", queenPlaces[ith - 1][j]);
printf("\n");
}
return 0;
}
void putQueen(int ithQueen)
{
int i, k, r;
if(ithQueen == 8){
count ++;
return;
}
for(i = 0; i < 8; i++){
if(board[i][ithQueen] == -1){
//摆放皇后
board[i][ithQueen] = ithQueen;
//将其后所有的摆放方法的第ith 个皇后都放在i+1 的位置上
//在i 增加以后,后面的第ith 个皇后摆放方法后覆盖此时的设置
for(k = count; k < 92; k++)
queenPlaces[k][ithQueen] = i + 1;
//设置控制范围
for(k = 0; k < 8; k++)
for(r = 0; r < 8; r++)
if(board[k][r] == -1 && (k == i || r == ithQueen || abs(k - i) == abs(r - ithQueen)))
board[k][r] = ithQueen;


/*调试程序
for(k = 0; k < 8; k++){
for(r = 0; r < 8; r++)
printf("%3d",board[k][r]);
printf("\n");
}
system("pause");
system("cls");
*/


//向下级递归
putQueen(ithQueen + 1);
//回溯,撤销控制范围
for(k = 0; k < 8; k++)
for(r = 0; r < 8; r++)
if(board[k][r] == ithQueen) board[k][r] = -1;


/*调试程序
for(k = 0; k < 8; k++){
for(r = 0; r < 8; r++)
printf("%3d",board[k][r]);
printf("\n");
}
system("pause");
system("cls");
*/


}
}
}