Daily Diaries Of CTK

.

Hãy chọn cho mình một con đường để đi

Nếu bạn không có con đường nào để đi thì cũng không có thành công nào chọn bạn

Hãy để mỗi ngày trôi qua là một ngày ý nghĩa

Luôn cố gắng hết mình vì những ước mơ.

Hãy để ngày hôm nay tốt hơn ngày hôm qua

Bạn sinh ra để làm nên những việc lớn lao.

Hãy tin vào chính bản thân của mình.

Để thực hiện được mơ ước thì bạn phải biết khát khao.

Luôn biết đứng lên sau mỗi lần vấp ngã.

Hạnh phúc không phải là kết quả, đó là quá trình bạn đi tới thành công.

Chủ Nhật, 22 tháng 5, 2016

Binary Search Tree



#include <iostream>
#include<cctype>
#include <stdlib.h>
#include <conio.h>

using namespace std;

struct node
{
 int element;
 node *left;
 node *right;
 int height;
};
typedef struct node *nodeptr;
class bstree
{
 public:
  void insert(int,nodeptr &);
  void del(int, nodeptr &);
  int deletemin(nodeptr &);
  void find(int,nodeptr &);
  nodeptr findmin(nodeptr);
  nodeptr findmax(nodeptr);
  void makeempty(nodeptr &);
  void copy(nodeptr &,nodeptr &);
  nodeptr nodecopy(nodeptr &);
  void preorder(nodeptr);
  void inorder(nodeptr);
  void postorder(nodeptr);
  int bsheight(nodeptr);
  nodeptr srl(nodeptr &);
  nodeptr drl(nodeptr &);
  nodeptr srr(nodeptr &);
  nodeptr drr(nodeptr &);
  int max(int,int);
  int nonodes(nodeptr);
};
// Inserting a node
void bstree::insert(int x,nodeptr &p)
{
 if (p == NULL)
 {
  p = new node;
  p->element = x;
  p->left=NULL;
  p->right = NULL;
  p->height=0;
  if (p==NULL)
  {
   cout<<"Out of Space\n"<<endl;
  }
 }
 else
 {
  if (x<p->element)
  {
   insert(x,p->left);
   if ((bsheight(p->left) - bsheight(p->right))==2)
   {
    if (x < p->left->element)
    {
     p=srl(p);
    }
    else
    {
     p = drl(p);
    }
   }
  }
  else if (x>p->element)
  {
   insert(x,p->right);
   if ((bsheight(p->right) - bsheight(p->left))==2)
   {
    if (x > p->right->element)
    {
     p=srr(p);
    }
    else
    {
     p = drr(p);
    }
   }
  }
  else
  {
   cout<<"Element Exists\n"<<endl;
  }
}
int m,n,d;
m=bsheight(p->left);
n=bsheight(p->right);
d=max(m,n);
p->height = d + 1;
}
// Finding the Smallest
nodeptr bstree::findmin(nodeptr p)
{
 if (p==NULL)
 {
  cout<<"The tree is empty\n"<<endl;
  return p;
 }
 else
 {
  while(p->left !=NULL)
  {
   p=p->left;
   //return p;
  }
  return p;
 }
}
// Finding the Largest node
nodeptr bstree::findmax(nodeptr p)
{
 if (p==NULL)
 {
  cout<<"The tree is empty\n"<<endl;
  return p;
 }
 else
 {
  while(p->right !=NULL)
  {
   p=p->right;
   //return p;
  }
  return p;
 }
}
// Finding an element
void bstree::find(int x,nodeptr &p)
{
 if (p==NULL)
 {
  cout<<"Sorry! element not found\n"<<endl;
 }
 else
 {
  if (x < p->element)
  {
   find(x,p->left);
  }
  else
  {
   if (x>p->element)
   {
    find(x,p->right);
   }
   else
   {
    cout<<"Element found!\n"<<endl;
   }
  }
 }
}
// Copy a tree
void bstree::copy(nodeptr &p,nodeptr &p1)
{
 makeempty(p1);
 p1 = nodecopy(p);
}
// Make a tree empty
void bstree::makeempty(nodeptr &p)
{
 nodeptr d;
 if (p != NULL)
 {
  makeempty(p->left);
  makeempty(p->right);
  d=p;
  free(d);
  p=NULL;
 }
}
// Copy the nodes
nodeptr bstree::nodecopy(nodeptr &p)
{
 nodeptr temp;
 if (p==NULL)
 {
  return p;
 }
 else
 {
  temp = new node;
  temp->element = p->element;
  temp->left = nodecopy(p->left);
  temp->right = nodecopy(p->right);
  return temp;
 }
}

// Deleting a node
void bstree::del(int x,nodeptr &p)
{
 nodeptr d;
 if (p==NULL)
 {
  cout<<"Sorry! element not found\n"<<endl;
 }
 else if ( x < p->element)
 {
  del(x,p->left);
 }
 else if (x > p->element)
 {
  del(x,p->right);
 }
 else if ((p->left == NULL) && (p->right == NULL))
 {
  d=p;
  free(d);
  p=NULL;
  cout<<"Element deleted successfully\n"<<endl;
 }
 else if (p->left == NULL)
 {
  d=p;
  free(d);
  p=p->right;
  cout<<"Element deleted successfully\n"<<endl;
 }
 else if (p->right == NULL)
 {
  d=p;
  p=p->left;
  free(d);
  cout<<"Element deleted successfully\n"<<endl;
 }
 else
 {
  p->element = deletemin(p->right);
 }
}

int bstree::deletemin(nodeptr &p)
{
 int c;
 cout<<"inside deltemin\n"<<endl;
 if (p->left == NULL)
 {
  c=p->element;
  p=p->right;
  return c;
 }
 else
 {
  c=deletemin(p->left);
  return c;
 }
}
void bstree::preorder(nodeptr p)
{
 if (p!=NULL)
 {
  cout<<p->element<<"\t";
  preorder(p->left);
  preorder(p->right);
 }
}

// Inorder Printing
void bstree::inorder(nodeptr p)
{
 if (p!=NULL)
 {
  inorder(p->left);
  cout<<p->element<<"\t";
  inorder(p->right);
 }
}

// PostOrder Printing
void bstree::postorder(nodeptr p)
{
 if (p!=NULL)
 {
  postorder(p->left);
  postorder(p->right);
  cout<<p->element<<"\t";
 }
}

int bstree::max(int value1, int value2)
{
 return ((value1 > value2) ? value1 : value2);
}
int bstree::bsheight(nodeptr p)
{
 int t;
 if (p == NULL)
 {
  return -1;
 }
 else
 {
  t = p->height;
  return t;
 }
}

nodeptr bstree:: srl(nodeptr &p1)
{
 nodeptr p2;
 p2 = p1->left;
 p1->left = p2->right;
 p2->right = p1;
 p1->height = max(bsheight(p1->left),bsheight(p1->right)) + 1;
 p2->height = max(bsheight(p2->left),p1->height) + 1;
 return p2;
}
nodeptr bstree:: srr(nodeptr &p1)
{
 nodeptr p2;
 p2 = p1->right;
 p1->right = p2->left;
 p2->left = p1;
 p1->height = max(bsheight(p1->left),bsheight(p1->right)) + 1;
 p2->height = max(p1->height,bsheight(p2->right)) + 1;
 return p2;
}
nodeptr bstree:: drl(nodeptr &p1)
{
 p1->left=srr(p1->left);
 return srl(p1);
}
nodeptr bstree::drr(nodeptr &p1)
{
 p1->right = srl(p1->right);
 return srr(p1);
}

int bstree::nonodes(nodeptr p)
{
 int count=0;
 if (p!=NULL)
 {
  nonodes(p->left);
  nonodes(p->right);
  count++;
 }
 return count;
}

int main()
{
 //clrscr();
 nodeptr root,root1,min,max;//,flag;
 int a,choice,findele,delele;
 char ch='y';
 bstree bst;

 //system("clear");
 root = NULL;
 root1=NULL;
 cout<<"\n\t\t\t\tWELCOME TO AVL TREE"<<endl;
 cout<<"\t\t\t\t:::::::::::::::::::\n"<<endl;

 do
 {
  cout<<"\t\t::::::::::::::::::::::::::::::::::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 1 to insert a new node::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 2 to find the minimum value:::::::::::"<<endl;
  cout<<"\t\t::::Enter 3 to find the max value:::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 4 to search a value:::::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 5 to delete a value:::::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 6 to display Preorder:::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 7 to display Inorder::::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 8 to display Postorder::::::::::::::::"<<endl;
  cout<<"\t\t::::Enter 9 to display the height of the tree:::"<<endl;
  cout<<"\t\t::::Enter 0 to exit:::::::::::::::::::::::::::::"<<endl;
  cout<<"\t\t::::::::::::::::::::::::::::::::::::::::::::::::\n"<<endl;

  cout<<"\nEnter the choice: ";
  cin>>choice;

  switch(choice)
  {
   case 1:
    cout<<"\n\t\tADDING NEW NODE"<<endl;
    cout<<"\t\t:::::::::::::\n"<<endl;
    cout<<"Enter a new value: ";
    cin>>a;
    bst.insert(a,root);
    cout<<"\nThe new value have been added to your tree successfully\n"<<endl;
    break;
   case 2:
    if (root !=NULL)
    {
     min=bst.findmin(root);
     cout<<"\nThe minimum element in the tree is: "<<min->element<<endl;
    }
    break;
   case 3:
    if (root !=NULL)
    {
     max=bst.findmax(root);
     cout<<"\nThe maximum element in the tree is: "<<max->element<<endl;
    }
    break;
   case 4:
    cout<<"\nEnter node to search: ";
    cin>>findele;
    if (root != NULL)
    {
     bst.find(findele,root);
    }
    break;
   case 5:
    cout<<"\nEnter node to delete: ";
    cin>>delele;
    bst.del(delele,root);
    bst.inorder(root);
    cout<<endl;
    break;
   case 6:
    cout<<"\n\t\tPRE-ORDER TRAVERSAL"<<endl;
    bst.preorder(root);
    cout<<endl;
    break;
   case 7:
    cout<<"\n\t\tIN-ORDER TRAVERSAL"<<endl;
    bst.inorder(root);
    cout<<endl;
    break;
   case 8:
    cout<<"\n\t\tPOST ORDER TRAVERSAL"<<endl;
    bst.postorder(root);
    cout<<endl;
    break;
   case 9:
    cout<<"\n\t\tHEIGHT\n"<<endl;
    cout<<"The height of the tree is: "<<bst.bsheight(root)<<endl;

    break;
   case 0:
    cout<<"\n\tThank your for using AVL tree program\n"<<endl;
    break;
   default:
    cout<<"Sorry! wrong input\n"<<endl;
    break;
  }
  //system("pause");
  //system("cls");
 }while(choice != 0);
 return 0;
}

Thứ Năm, 12 tháng 5, 2016

How to make install graphic in ubuntu


Hello friends , here we are with a video "Graphics Programming in C++ on Ubuntu" , how to setup graphics.h in Linux environment / Ubuntu.

Download link: http://download.savannah.gnu.org/rele...

commands used in the tutorial:

= sudo apt-get update
= sudo apt-get upgrade
= sudo apt-get install build-essential
= sudo apt-get install libsdl-image1.2 libsdl-image1.2-dev guile-1.8 guile-1.8-dev libsdl1.2debian libart-2.0-dev libaudiofile-dev libesd0-dev libdirectfb-dev libdirectfb-extra libfreetype6-dev libxext-dev x11proto-xext-dev libfreetype6 libaa1 libaa1-dev libslang2-dev libasound2 libasound2-dev

= cd libgraph-1.0.2
= ./configure
= sudo make
= sudo make install
= sudo cp /usr/local/lib/libgraph.* /usr/lib


after you code graphics you will buile programs by command: 
g++ name.cpp -o name -lgraph

Chủ Nhật, 1 tháng 5, 2016

Tôi đã học tin học như thế nào? Bắt đầu từ đâu


Tôi đã học tin học như thế nào? Bắt đầu từ đâu

Trong bài viết này mình sẽ cố gắng trả lời ngắn gọn và đơn giản những câu hỏi mà mình nghĩ rằng sẽ có ích đối với các bạn đặc biệt có đam mê đối với Tin học, nhưng mới tiếp xúc và không biết phải bắt đầu từ đâu. Trọng tâm của mình sẽ là việc học thuật toán để tham gia các kì thi quốc gia, tuy nhiên mình cũng sẽ cố gắng gợi mở thêm nhiều hướng khác trong phạm trù kinh nghiệm của mình.
Lưu ý: Xuất xứ của mình là một người học Tin để thi quốc gia, sau đó chuyển dần sang nghiên cứu khoa học về Machine Learning. Vì thế, những gì được viết dưới đây xuất phát từ kinh nghiệm của riêng bản thân mình, và chỉ thể hiện góc nhìn từ con đường mình đã đi. Mình khuyên các bạn nên chừa ra một khoảng trống trong tâm hồn để thu nhặt các ý kiến từ các góc nhìn khác.
Sau đây là các câu hỏi…
Tại sao phải học Tin học?
Về cơ duyên đến với Tin học của mình, bạn có thể tham khảo bài viết trước. Hy vọng các bạn sẽ tìm thấy điểm chung nào đó. Một điều mình muốn nói thêm là Tin học hiện nay giống như một môn Toán thứ hai vậy. Nếu sau cuộc cách mạng công nghiệp, nhân loại bắt đầu gắn động cơ vào bất cứ mọi thứ xung quanh, thì đến cuộc cách mạng máy tính hiện tại, con người bắt đầu dùng máy tính vào mọi việc có thể. Một công việc trong thế giới hiện đại khó mà có thể vận hành hiệu quả mà không cần dùng đến máy tính. Vì thế, một con người trong thế giới hiện đại khó mà có thể thành công mà không có kỹ năng sử dụng công cụ này. Bạn bè của mình làm nhiều ngành khác nhau, từ toán học, hoá học, vật lý, đến kiểm toán. Họ đều phải chí ít phải có kỹ năng lập trình để phục vụ cho công việc của mình.
Học Tin học như thế nào cho đúng?
Rất khó để đưa được một câu trả lời trọn vẹn. Thay vì đó mình sẽ nói về một cách học mình cho là chưa đúng. Đó là quan niệm học Tin học tức là học một ngôn ngữ lập trình. Các cách nói dân gian như “học Pascal” không thể hiện được hết tinh thần của việc học Tin. Đối với phạm trù Tin học cấp 3, điều quan trọng nhất bạn rút ra được sau 3 năm học phải một tư duy thuật toán. Bạn cần làm cho bộ não quen thuộc với lối suy nghĩ theo các cấu trúc điều kiện, cấu trúc lặp lại, cách chia chương trình ra thành các chương trình nhỏ hơn rồi tập trung giải quyết từng phần một. Vì đa phần các ngôn ngữ lập trình đều được xây dựng dựa trên các yếu tố cơ bản trên, việc bạn thành thạo về tư duy lập trình sẽ giúp bạn học một ngôn ngữ lập trình rất nhanh. Hãy làm chủ ngôn ngữ lập trình chứ đừng bị phụ thuộc vào chúng.
Mình không phản đối việc thành thục một ngôn ngữ lập trình. Thậm chí việc thành thạo một ngôn ngữ lập trình là quan trọng sống còn sau này khi bạn muốn làm ra những sản phẩm thực thụ. Nhưng hãy để việc đó sau khi bạn đã có một nền tảng tư duy vững chắc.
Nhưng vẫn phải chọn một ngôn ngữ để bắt đầu học chứ?
Chính xác. Câu trả lời này mình xin chia ra dành cho hai đối tượng:
1. Các bạn luyện thi tin học quốc gia: theo mình biết thì hai lựa chọn chính dành cho các bạn là PascalC++. Việc đưa C++ vào danh sách là một thay đổi lớn vì 6 năm trước khi mình học Tin, Pascal là sự lựa chọn duy nhất cho các vòng thi trong nước. Trong tương lai mình dự đoán C++ sẽ thay thế hẳn cho Pascal. Mình không rành về Pascal bằng C++ nên sẽ không so sánh tính năng của chúng chi tiết. Tuy nhiên, C++ đưa ra ưu thế rõ rệt về tốc độ, bao gồm cả tốc độ chạy của chương trình và tốc độ lập trình ra chương trình đó. Nói đơn giản là code C++ chạy nhanh và tương đối ngắn gọn (không quá ngắn gọn đến mức khó hiểu). Đặc biệt, khi học C++ bạn có thể tham gia được rất nhiều kỳ thi lập trình thuật toán trực tuyến trên mạng. Đây là mấu chốt trong việc thành công trong kỳ thi quốc gia. Một lợi thế khác khi học C++ là nó được sử dụng rộng rãi trong công nghiệp. Vì sớm muộn gì bạn cũng phải học đến nó chi bằng học sớm từ đầu.
2. Các bạn học tin với mục đích chung khác: ngoài C++ ra, theo mình ngôn ngữ Python là một sự khởi đầu tuyệt vời. Cú pháp của Python cực kỳ đơn giản, giống như là đang viết những phép toán trong sách giáo khoa vậy. Dù đơn giản, Python lại rất đa năng và được hỗ trợ mạnh mẽ từ cộng đồng người sử dụng. Java là một sự lựa chọn tốt cho những bạn muốn học về lập trình hướng đối tượng một cách bài bản. Dù cả Python và C++ đèu hỗ trợ lập trình hướng đối tượng, Java theo mình là ngôn ngữ biểu hiện điều này rõ rệt nhất. Bạn không thể viết một chương trình hoàn chỉnh trong Java mà không đặt nó vào trong một đối tượng (class), trong khi nếu sử dụng Python và C++ ta có thể quên bẵng đi khái niệm này. Ngôn ngữ Java chặt chẽ và dạy cho bạn những thói quen tốt về cách thiết kế chương trình.
Học ngôn ngữ lập trình như thế nào?
Mình sẽ giả sử là các bạn muốn học C++. Theo mình thì việc chạy ra nhà sách và mua ngay một cuốn sách giáo khoa dày cộm về C++ không giúp ích gì mấy (vì mình đã từng làm điều này). Hồi mình mới học C++, mình thường lên các trang giải bài trực tuyến hoặc cách trang kỳ thi và xem code C++ của các cao thủ khác để học theo cách code của học. Điều này có hai lợi ích. Thứ nhất, vì mình đã biết trước lời giải, nên mình có thể đoán được từng phần chương trình sẽ làm nhiệm vụ gì, sau đó đi sau vào xem cụ thể nhiệm vụ đó được thực hiện thế nào. Thứ hai, vì là cao thủ nên code của họ sẽ rất tối ưu, có thể học được nhiều mẹo vặt mà sách giáo khoa không dạy. Một cách khác là bạn có thể google từ khoá “C++ interactive tutorial” để tìm kiếm cách trang dạy ngôn ngữ lập trình một cách tương tác. Các trang này thường sẽ đưa bạn đi qua các khái niệm từ dễ đến khó. Bạn vừa học vừa thực hành ngay nên sẽ bớt nhàm chám hơn là ngồi cày sách. Tuy nhiên, về lâu về dài bạn vẫn phải đọc sách hoặc tài liệu chính thống để hiểu biết các khái niệm cốt lõi của một ngôn ngữ. Ví dụ như là trong C++ bạn có thể truyền tham số bằng cả reference hoặc value, trong khi đó Java chỉ cho phép truyền tham số bằng value mà thôi. Những điều “behind-the-scenes” như vậy không thể học được nếu chỉ nhìn vào code của người khác.
StackOverflow – The definitive C++ book guide and list
Nên dùng công cụ gì để lập trình?
Trên Windows, Free Pascal là sự lựa chọn tốt cho Pascal. Ngoài ra còn có một số công cụ khác như Lazarus, Codeblocks, Delphi,… Đối C++ thì hồi trước mình hay dùng nhất là Dev-C++.
Tuy nhiên, mình khuyên là các bạn nên từ bỏ Windows và chuyển sang một hệ điều khác dựa trên nền tảng Unix như là Ubuntu. Hiện tại thì màn hình lập trình của mình trông giống như thế này (bấm vào để phóng to):
Ở cửa sổ trái mình sử dụng vim, chỉ đơn thuần là một chương trình soạn thảo văn bản (text editor) của Ubuntu. Ở cửa sổ phải mình sử dụng terminal, nói nôm na là nơi bạn có thể điều khiển máy tính bằng các câu lệnh thay vì dùng chuột (giống như là MS-DOS thời xa xưa). Lưu ý là hai công cụ này đều có sẵn trong Ubuntu, bạn không cần phải cài đặt gì cả. Trong hình, mình có cài thêm một số Plugins cho vim để thêm màu mè, màn hình đen, hiển thị dòng cột (cảm ơn bạn mình là RR!). Mình cũng cài thêm theme Macbook cho máy nên màn hình trông giống MacOS mặc dù thật ra nó vẫn là Ubuntu.
Khi lập trình, mình viết code vào vim rồi sử dụng câu lệnh này để biên dịch (compile) chương trình.
1
g++ test.cpp -o a -O2 -Wall
Lựa chọn “-o a” sẽ biên dịch file test.cpp thành một file excutable tương tự như file .exe của Windows có tên là a trong cùng thư mục của file test.cpp. Vì thế, muốn chạy chương trình, mình chỉ cần chạy file a bằng câu lệnh sau:
1
./a
Nếu bạn không thích vim, có thể xài gedit hoặc là emacs hoặc bất cứ trình soạn thảo văn bản nào khác đều được. Bộ đôi (text editor + terminal) rất đa năng vì bạn có thể sử dụng nó cho nhiều ngôn ngữ khác nhau. Hơn nữa, trong một sản phẩm lập trình thật sự, bạn không phải compile một lúc một file nữa mà có thể là cả ngàn files. Lúc đó, bạn sẽ cần đến các công cụ chạy từ terminal. Cho nên, làm quen với terminal sớm là một lợi thế. Ngoài ra, trong tương lai gần, nếu thi tin học quốc tế (IOI), các bạn sẽ thi trên hệ điều hành Ubuntu.
Tìm thầy nơi đâu? 
Muốn học giỏi cần phải có thầy giỏi. Cho dù có tố chất đến mấy mà không biết cách khai phá thì cũng sẽ không thể đạt đỉnh cao. Nếu ai đó bảo bạn rằng chỉ có tự học mới giỏi được, thì người đó nói đúng. Nhưng nếu bạn chỉ ngồi trong giếng nhà tự mày mò tất cả thì theo mình đó không phải là tự học, mà chỉ là học một mình. Tự học bao gồm cả việc tự tìm thầy để mà học.
Khi mình đặt chân vào trường Phổ Thông Năng Khiếu, nơi có đội tuyển tin thuộc hàng top của đất nước thời bấy giờ, mình cứ ngỡ sẽ được dạy dỗ bởi những sư tổ tu luyện lâu năm, là những giáo sư tiến sĩ đầu tóc bạc phơ. Tuy nhiên, Năng Khiếu xây dựng cho mình một hình tượng khác về người thầy. Người “thầy” của mình ở Năng Khiếu ngoài thầy chủ nhiệm, còn là các anh khóa trên đi trước và các bạn trong cùng đội tuyển. Ngoài ra, mình cũng chủ động làm quen các anh học giỏi trong cả nước thời ấy như Khúc Anh Tuấn hoặc Phạm Quang Vũ để hỏi bài. Khi hỏi mình cũng thấy hơi ngại nhưng mà thông qua đó mình học được cách suy nghĩ rất hay của các anh. Có những bài tập đòi hỏi những kỹ thuật mà mình thật sự không thể nào biết được nếu chỉ ngồi học trong giếng nhà. Sau này, diễn đàn VNOI được các đàn anh lập ra cũng vì mục đích để mọi người tìm được những người thầy như vậy.
Tuy nhiên, mình khuyến cáo các bạn không nên quá lạm dụng các “thầy”, không nên coi các thầy như là một cỗ máy trả lời. Các “thầy” thường sẽ tân tình đỡ các bạn hơn nếu các bạn thể hiện được mình là người chịu khó tư duy và tìm tòi hơn là chỉ biết vòi vĩnh câu trả lời. Các bạn coi phim chắc cũng biết là cao nhân chỉ truyền bí kíp cho kẻ có tố chất. Một mẹo nhỏ là nhớ lịch sự nói “cảm ơn” sau mỗi lần hỏi.
Tìm bài nơi đâu?
Khi học Tin học bạn có một lợi thế đó là bài tập dường như là vô biên (SPOJ, Timus, POJ). Nhưng bạn không cần thiết làm hết tất cả chúng để giỏi. Vì thế ta thay vì hỏi tìm bài ở đâu, thì nên hỏi:
Nên làm những bài gì?
Mình gợi ý một số cách làm bài cơ bản như sau:
  1. Làm hết những bài cơ bản: vào trang SPOJ hoặc VOJ, mở list đề bài ra. Ở tiêu đề của cột “Users” khi bạn bấm vào đó một lần, thì các bài tập sẽ được sắp xếp theo thứ tự giảm dần số lượng người làm được. Bài ở những trang đầu tiêu là những bài cơ bản nhất, hầu như ai cũng làm được. Bạn nên làm khoảng vài trang đầu để luyện các kỹ thuật cơ bản.
  2. Làm theo chủ đề: khi bạn đang làm những bài cơ bản sẽ gặp những bài bạn nghĩ mãi vẫn không ra. Không phải là bạn kém thông minh gì mà vì những thuật toán đó quá xa lạ với bạn. Vậy thì bạn nên tìm tòi làm những dạng bài tương tự để biết cách áp dụng các thuật toán mới học. Sau khi google mình tìm thấy trang này Problem classifier có lẽ khá hữu dụng.
Mình muốn dừng ở đây một chút để lưu ý là cách 1 và cách 2 phải nên được áp dụng bổ trợ cho nhau bởi vì một phương pháp chú trọng vào mở rộng kiến thức theo chiều rộng, còn phương pháp còn lại mở rộng theo chiều sâu. Chỉ làm theo kiểu gặp bài nào làm bài đó thì khó thể đúc kết được những kinh nghiệm sâu sắc. Ngược lại, làm theo chủ đề cho các bạn thời gian để tập trung suy nghĩ về một vấn đề, nhưng cẩn thận tránh đam mê quá một dạng bài mà trở nên không thoải mái khi làm những dạng bài khác.
3. Tham gia các kì thi trực tuyến: nếu hai phương pháp trên sẽ cho bạn nền tảng tốt thì phương pháp này sẽ đưa bạn đến đỉnh cao. Vì mục đích cuối của bạn là tham gia các kì thi quốc gia quốc tế, nên việc ngồi cả ngày trời để làm một bài tập trên các trang Online Judge một lúc nào đó sẽ trở thành một thói quen vô cùng nguy hại. Lúc đó, bạn nên chuyển qua làm bài theo thời gian thực. Có cảm nhận về áp lực thời gian, đầu óc bạn sẽ trở nên nhanh nhẹn hơn nhiều. Hơn nữa, khi thật sự thi đấu với những con người khác, bạn cũng sẽ có cảm xúc luyện tập hơn là chỉ ngồi cày Online Judge một mình. Hiện nay, các kì thi trực tuyến mọc lên như nấm (Codeforces, TopCoder, Hackerrank, USACO, COCI). Các bạn cũng có thể lấy bài từ các cuộc thi khác vào tạo ra cuộc thi của riêng rồi mời bạn bè tham gia (HUSTOJ).
Làm sao để làm bài ít mà vẫn giỏi?
Không có cách nào cả. Phải làm bài nhiều mới giỏi được. Nghiên cứu về các kiện tướng ở nhiều bộ môn cho thấy họ đều luyện tập ít nhất 10 ngàn giờ để đạt được trình độ đó.
Làm sao để không cần làm quá nhiều bài mà vẫn giỏi?
Điều này thì có thể. Thậm chí mình cảm thấy làm quá nhiều sẽ dẫn đến hoặc là quá tải hoặc là sẽ trở một cỗ máy giải bài, giải bài xong thì bỏ qua ngay mà không suy nghĩ thêm gì nữa. Nên nhớ là thời gian luyện tập của các bạn có hạn, nên các bạn phải khai thác hết giá trị của từng bài tập bạn giải. Giải một bài tập xong rồi quăng sang một bên là vô cùng phí phạm. Việc các bạn giải được nhiều bài trước kì thi chẳng có nghĩa lý gì nếu bạn không rút ra được nhiều giá trị từ chúng.
Suy cho cùng, thì nguyên lý “muốn giỏi phải làm nhiều bài tập” vẫn không đổi. Tuy nhiên, thay vì làm các bài tập một cách tuần tự, các bạn có thể cùng một lúc giải nhiều bài tập bằng cách suy nghĩ về những biến thể của một bài tập vừa giải được. Hãy xem xem trong bài toán có những điều kiện nào thể thay đổi được, có thể tổng quát hóa lên được. Bài toán này có tính chất gì đặc biệt mà thuật toán của bạn lại giải được? Tính chất đó có thể xuất hiện dưới dạng khác hay không? Chỉ cần bỏ một ít thời gian đặt ra những câu hỏi dạng này và đào sâu khám phá, giá trị thu được khi giải một bài tập sẽ được nhân lên nhiều lần. Giải một bài mà như giải 10 bài là như vậy.
Một ví dụ đơn giản là trong lúc làm bài tập, mình nhận ra rằng thuật toán chia nhị phân được sử dụng để chuyên trị những bài tập đòi hỏi “cực tiểu hóa một giá trị cực đại” (hoặc ngược lại, ví dụ như là tìm tập hợp sao cho số lớn nhất trong tập nhỏ nhất trong tất cả các cách chọn). Trong một ví dụ khác, với bài QBDIVSEQ, nhận xét mấu chốt là “độ dài dãy con tăng dài nhất là số lượng ít nhất các dãy con giảm mà ta có thể phân chia dãy ban đầu thành”. Khi chứng minh nhận xét này, mình nhận thấy một tính chất đặc biệt của mối quan hệ “lớn bé” giúp cho chứng minh trở nên khả thi. Đó là tính chất bắc cầu: “a < b, b < c suy ra a < c”. Từ đó, mình suy nghĩ ra rằng thay vì sử dụng mối quan hệ “lớn bé” thông thường khi so sánh các số, ta có hoàn toàn có thể áp dụng nhận xét của bài này cho một mối quan hệ “lớn bé” khác (ví dụ quan hệ chia hết), miễn là tính chất bắc cầu được thỏa mãn.
Cuối cùng nhưng quan trọng nhất… tiếng Anh!
Theo mình, có MỘT thứ tách biệt người học giỏi và người học không giỏi trong các kì thi Tin học quốc gia và quốc tế, đó là việc người học đó có thoải mái với tiếng Anh hay không. Việc thoải mái với tiếng Anh giúp cho bạn có thể vươn ra khỏi cộng đồng trong nước để tiếp cận với nhiều luồng tri thức của nhân loại. Hồi mình mới học Tin, tìm được một cuốn sách dạy thuật toán bằng tiếng Việt giống như là tìm cá mập trong vịnh Thái Lan vậy. Thực tế, chỉ có một cuốn sách về thuật toán được viết sát với nội dung thi quốc gia, do thầy Lê Minh Hoàng biên soạn. Nhưng chỉ luyện các thuật toán cơ bản trong sách thầy Hoàng thì không đủ để có thể cạnh tranh trên đấu trường quốc tế (em xin lỗi thầy ). Lúc ấy, muốn học thêm các kỹ thuật nâng cao về quy hoạch động hay cấu trúc dữ liệu, mình phải tìm đến trang dạy thuật toán của Topcoder hoặc đọc lời giải bằng tiếng Anh của các kì thi quốc tế. Hiện nay, các thành viên của Codeforces có viết nhiều trang blog mô tả đủ loại kỹ xảo lập trình tiên tiến nhất. Đó là một mỏ vàng cần được khai thác.
Thoái mái với tiếng Anh cũng giúp bạn hòa nhập với cộng đồng luyện thi lập trình trên thế giới thông qua việc tham gia các kì thi trực tuyến (đề tiếng Anh). Bạn từ một con cá nhỏ trong cái ao làng, vươn ra biển lớn. Bạn sẽ thấy rằng con cá lớn nhất trong cái ao của bạn chẳng to bằng một phần trăm con cá lớn của đại dương. Khi được tôi luyện với con những con cá đó, dù cố tình hay vô ý, khả năng sinh tồn của bạn rồi cũng sẽ được nâng cao.

Thứ Bảy, 2 tháng 4, 2016

Vì sao Việt Nam càng ngày càng tụt hậu


Đây là một bài viết tôi sưu tầm được, nhưng tôi phải nói trước với bạn là ngôn từ của nó không hề ngọt tai, nếu bạn chưa sẵn sàng nhìn nhận thực tại bản thân hay thế hệ, có lẽ bạn sẽ thấy một chút khó chịu khi đọc.
Nếu bạn muốn thay đổi đất nước, nếu bạn đã 18 hay 20 tuổi hoặc hơn, hẳn là bạn cũng sẽ sớm trở thành những ông bố, bà mẹ. Thế nên, hãy chuẩn bị cho thay đổi, không cần biết trước đây bạn được giáo dục như thế nào, hãy chắc rằng, bạn sẽ trở thành hình mẫu mà bạn muốn con cái mình trở thành trong tương lai.
Bạn có biết lý do chính dẫn tới việc nước Việt ngày càng sa sút? Câu trả lời là: LƯỜI!
Người ta cứ đang kéo cố gắng đất nước này đi lên. Hàng loạt bài báo được viết nên. Trong đó chỉ ra rằng đất nước này đang bị ô nhiễm hóa, đang bị bóc lột hóa, đang bị bất công hóa, và đang bị căng thẳng hóa… Nhưng rồi các bạn biết được điều gì là quan trọng? Ừ, CHẲNG AI THÈM ĐỌC NHỮNG BÀI BÁO ĐÓ. Nghĩa là người ta không biết chuyện gì đang xảy ra chung quanh họ, không biết được mức độ căng thẳng leo thang của thế giới xung quanh. Tóm lại là, người viết thì cứ viết, người chơi thì cứ chơi, không ai thèm đọc. Dĩ nhiên là ta đang nói đến số đông thôi.
Vậy ra, người ta đang cố gắng thay đổi mọi thứ ở phần ngọn. Nghĩa là kêu gọi những con người đã góp sức gây nên hiện trạng này, hãy thôi đừng phá hủy đất nước nữa, hãy thôi xả rác, hãy thôi chém giết. Đó là một ý tưởng điên rồ. Kêu gọi người từng sát hại đất nước này hãy suy nghĩ lại, rũ chút lòng thương, đừng phá hoại nữa.
Bạn biết vì sao mà đất nước này cứ thụt lùi, thậm chí bây giờ thua cả Lào và Campuchia không? Nếu bạn định trả lời là chính phủ thì hãy tạm gác lại cái ý nghĩ đó. Bởi vì vấn đề là dân chúng ở đây mang một căn bệnh nan y không thể chữa nỗi: LƯỜI!
LƯỜI VẬN ĐỘNG, TẬP THỂ DỤC
So với số người tập thể dục, thì số người không tập chiếm gấp nhiều lần, nếu không muốn nói là áp đảo hoàn toàn. Bạn không tin? Sáng thức dậy 4 giờ sáng chạy bộ. Rất nhiều ông cụ, bà già sẽ chạy cùng bạn. Số trung niên cũng rất nhiều. Còn số thanh niên thì chiếm trên đầu ngón tay thôi nhé.
Mà không tập thể dục thì chẳng đào đâu ra sức khỏe, không có sức khỏe thì làm cái gì cũng mau mệt, mau mệt thì sẽ nhanh chán, mà nhanh chán thì sẽ sớm bỏ cuộc. Những người có sức khỏe yếu thường làm mọi việc qua loa. Tin tôi đi. Họ không chịu đựng nỗi bất cứ chuyện gì hết. Đó là khi chúng ta nên nói tiếp các kiểu lười khác là hệ lụy của lười vận động.
LƯỜI HỌC
Cái này thì khỏi nói rồi. Trừ các học sinh trường chuyên và công lập, đa số những trường khác, học sinh rất chi là lười. Khoan hãy nói đến việc kiến thức có hàn lâm hay không, có khó nuốt hay không, có kém thực tiễn hay không. Mà hãy tự hỏi, tại sao lại như vậy? Không ai chịu đựng nỗi 2 3 tiếng học bài ở nhà. Nói trắng ra là họ quá lười chịu đựng. Alan Phan đã từng nói rằng ông không hiểu tại sao một đất nước dân số vàng như Việt Nam lại có vẻ lù khù như các cụ già đến vậy.
Pasted image1085x460 61.6 KB

Danh sách quốc gia theo số dân : Nguồn wiki2

Bạn hỏi tại sao? Hãy tạm trách Internet, Smartphone, Karaoke, Nhậu nhẹt, Lotte, Starbuck và các loại ăn chơi thời hiện đại nhé. Bạn lại hỏi tại sao nữa à? Bởi vì đó là thách thức của thời đại này. Thú vui hưởng thụ bao vây xung quanh, nhan nhãn đông tây nam bắc hướng nào cũng có. Tại sao phải chịu đựng học bài khi tụi bạn đi nhậu, đi hẹn hò, đi Lotte? À, quên nữa, đừng ai nói với tôi một câu mà đứa trẻ trâu nào cũng biết: Cái nào cũng có mặt lợi, quan trọng là đừng dùng quá liều lượng. Bởi vì, không có mấy ai biết kiểm soát chính họ ở cái vùng đất này đâu.
LƯỜI LÀM
Tất cả những người chủ ở Việt Nam đều khó tính, họ thường đốc thúc công nhân của mình. Bởi vì họ biết, không đốc thúc, bọn công nhân chỉ ngồi chơi, và làm kiểu đối phó, chủ tới thì luôn tay luôn chân, chủ đi thì phì phèo điếu thuốc, thậm chí là lướt facebook chat chit nữa là đằng khác. Nếu cha mẹ bạn là người trả tiền cho công nhân, chắc bạn sẽ rõ điều đó hơn cả.
Bạn hỏi vì sao họ lười làm, họ bắt đầu lười từ khi nào? Vì sao? Vì họ chẳng có thích thú gì với công việc. Bởi vì họ từ cái giây phút họ lười học, họ chẳng có kiến thức gì để giải quyết vấn đề nên họ chẳng muốn xảy ra thêm vấn đề gì nữa. Mà đấy, cách hay nhất để không có vấn đề gì để giải quyết là ngồi chơi. Làm việc thì tạo nên vấn đề, giải quyết vấn đề chính là một bước thăng tiến. Nhưng họ lại sợ gặp vấn đề biết bao. Không giải quyết được lại bị chửi, lại bị sỉ nhục, lại quê với người khác. Nên họ thà làm người nhàn rỗi tay chân, áo sạch đồ đẹp, không một vết bẩn còn hơn lấm lem mồ hôi, nhếch nhác không ai thèm dòm.
LƯỜI SUY NGHĨ
Lướt dạo hết vòng facebook là điều bạn có thể làm ngay. Nếu facebook bạn không có gì đáng để xem, không có gì để làm bạn cảm động, làm bạn thấy phải nhìn lại bản thân mình thì bạn chính là một ví dụ. Còn nếu có thông tin gì đó hay, viết về thực trạng của đất nước, về ô nhiễm môi trường, về động vật tuyệt chủng, hay các bài viết học thuật, hãy xem nó được bao nhiêu người like? À, thường thì không có bao nhiêu người like đâu. Không tin lướt ngay facebook là biết.
Chúng ta không có gì để học sao? Hay chúng ta chỉ quan tâm về tự sướng, em nào đẹp, em nào xài camera 360, anh nào GAY, chỗ nào chơi tốt, khu nào ăn ngon, quần áo chỗ nào bán đẹp? Nếu facebook của bạn không có bất cứ cái gì liên quan tới học thuật, kiến thức, thay vào đó là 90% ảnh girl xinh, trai đẹp, hãy yên tâm một cách chắc nịch rằng bạn là một trong những đứa lười suy nghĩ bậc nhất thế giới.
LƯỜI TRANH ĐẤU
Cái này thì khỏi phải nói luôn rồi. Cha chung chả ai khóc mà. Đất nước ngày càng đi xuống thì cũng mặc. Nói thật, chả ai quan tâm cả. Những người có tâm, những người làm báo cứ như những kẻ thui thủi một mình tự kỷ vậy. Bài nào họ viết ra, họ tự đọc, chả mấy ai đọc nói chi đến like và comment. Đi chơi noel xong rác thải đầy đường để phải viết lên báo, cũng chả cần thấy nhục mặt cho bản thân hay cho đất nước này, cứ thế năm nào cũng vậy, cũng lên báo, rồi cũng thôi, vì chẳng ai còn hơi sức để nói nữa.
Thờ ơ là căn bệnh của người Việt. Nếu không tin, search bài báo: “Người Việt vô cảm thứ 13 thế giới” là biết. Họ chẳng muốn tranh đấu. Họ chẳng muốn gì cả ngoài việc hưởng thụ những gì đang có. Tài nguyên chúng ta bán, cây rừng chúng ta cưa, voi rừng chúng ta giết, thú rừng chúng ta ăn, chả còn gì mà chúng ta “tha” cả. Khai thác triệt để cho thế hệ này tận hưởng, có thể đoán là trong vòng 10 năm tới sẽ cạn sạch. Nhưng mọi người thì cứ thờ ơ để mọi thứ ngày càng trở nên tồi tệ hơn. Miễn là họ không ở những vùng hiểm trở, thiên tai; miễn là họ không bị gì hết. Càng ngày, người ta càng rút về thành thị, co cụm, bạn thấy không? Cả đám ăn chơi phè phỡn với nhau, rồi chuốc độc nhau trong từng thớ thịt, dĩa cơm… Nhưng không ai muốn tranh đấu! Chẳng ai muốn cả, vì họ bận phải hưởng thụ sự hiện đại này.
Đấy là những thế hệ đã được đào tạo. Việt Nam thuộc loại khủng của thế giới trong việc chi ngân sách cho giáo dục. Họ đã làm gì, và chúng ta đã tôi luyện bản thân như thế nào? Có khi nào chúng ta thấy nhục nhã, chẳng cần gì cao siêu, mà chỉ bởi vì chúng ta vừa quăng một cục rác xuống đường. Ai đó nhắc nhở, và chúng ta phản bác: TRƯỚC SAU CŨNG CÓ NGƯỜI QUÉT THÔI. Liệu có bao giờ chúng ta thấy nhục mặt vì cái độ lười nó ghê tởm đến nỗi những con chó thông minh, biết đi ị đúng chỗ cũng phải khinh thường?
Những thế hệ đi qua, và những bài học của các bậc mẹ cha ngày càng thực dụng. Bạn không thấy xã hội này quá co cụm từ khi bạn chuẩn bị cắp đồ lên thành phố học? 99,9% tôi đảm bảo sẽ được nhắc: Giữ tiền cẩn thận nha con, trộm cắp dữ lắm; Ở ký túc xá coi chừng nhà con, trộm cắp phức tạp lắm; ở Sài Gòn cẩn thận nha con, dân tứ xứ chẳng biết ai là ai đâu…
Bạn đã từng nghe, chắc chắn như vậy, và hãy thừa nhận là lũ người xung quanh bạn thật gớm ghiếc. Và bạn, tôi chỉ đích danh bạn đó, cũng chưa chắc là một trường hợp đặc biệt gì ngoài lũ gớm ghiếc đó đâu. Một lũ tệ hại, cười với nhau những nụ cười giả tạo, đôi tay vịn chắc túi tiền và trôi vào dòng cuộc sống. Chúng ta chắp vá đất nước này, rách chỗ nào vá chỗ đó, nhưng đúng như Lưu Quang Vũ nói:
Có những cái sai không thể sửa được. Chắp vá, gượng ép chỉ càng sai thêm. Chỉ có cách là đừng bao giờ sai nữa, hoặc phải bù lại bằng một việc làm đúng khác.”
Nhưng chúng ta chẳng quan tâm lời dạy này. Chúng ta chắp vá nhiều hơn là đằng khác. Ai đó đút lót, chúng ta đút lót nhiều hơn. Ai đó đối phó để được điểm cao, chúng ta quyết tâm biết được đề thầy sắp ra giờ kiểm tra. Ai đó quăng rác bừa bãi, chúng ta quăng rác một cách tinh vi. Ai đó lừa đảo ta, ta học cách đó để lừa đảo lại người khác. Và chúng ta có một xã hội như ngày hôm nay. Chẳng ra một cái gì cả.
Một dân tộc ghê tởm nhau, đề phòng nhau đến những chuyện nhỏ nhặt đến như vậy thì làm sao còn đầu óc để đầu tư vào những thứ tiến bộ khác hơn? Một xã hội co cụm, những ánh mắt đầy hoài nghi, ghê tởm thay cho chúng ta!
Chúng ta lười mọi thứ. Chúng ta lười vận động, rồi thì sức khỏe chúng ta kém, sức chịu đựng không có nên chúng ta nhác học, lười làm, buồn ngủ khi phải nghĩ và chán ngán khi phải chịu đựng. Tất cả những gì chúng ta có là đối phó, từ trong ra ngoài. Không đối phó bằng cách hối lộ tiền, thì đối phó bằng cách mua bằng cấp giả, nếu không được thì học đại cho xong, và trong lúc học cũng đối phó với thầy cô. Vâng, chúng ta đối phó n+1 các loại. Nhưng điều làm tôi ghê tởm hơn cả tật đối phó, chính là không thèm đối phó nữa mà sẵn sàng thải rác ra đường như không giữa ban ngày ban mặt, buông lời tục tĩu, dâm dục giữa thiên hạ. Số đó không hề ít, xin chớ coi thường.
Chịu đựng! Những người đi ra từ chiến tranh với sức chịu đựng ghê gớm lại nuôi dạy con họ một cách đầy nuông chiều. Quá nhiều người đi ra từ chiến tranh, quá nghèo khổ để nói đến đức hạnh, tất cả những gì họ lo lắng là tiền, là mưu sinh. Đó là lý do chúng ta ở đây. Cả một lũ không được giáo dục tốt. Cả một lũ đang làm đất nước này đi xuống. Đó không phải là lỗi của họ, hãy thông cảm vì điều đó. Họ đã cố phải xây dựng lại mọi thứ từ đống tro tàn. Nhưng còn chúng ta thì sao? Được nuông chiều từ nhỏ tới lớn, chẳng phải chịu đựng bất cứ cái gì, và giờ thì sẵn sàng ngồi quán cafe chém gió suốt ngày.
Bạn biết bọn nhậu nhẹt và ngồi quán cafe chém gió thường nói gì khi gặp nhau? Tao mới xin làm chỗ kia, lương 4 triệu mà toàn ngồi chơi. Liền lập tức, thằng đối diện sẽ bảo: NGON VẬY!
Cái tư duy ở xứ này là: Ngồi chơi và “khỏe”! Nhưng yên tâm đi, vũ trụ rất công bằng. Cái chỏm nhỏ ở chỗ này trước sau gì cũng bị trừng phạt nếu tiếp tục tồn tại theo kiểu đó.
Nếu bạn muốn thay đổi đất nước, nếu bạn đã 18 hay 20 tuổi hoặc hơn, hẳn là bạn cũng sẽ sớm trở thành những ông bố, bà mẹ. Thế nên, hãy chuẩn bị cho thay đổi, không cần biết trước đây bạn được giáo dục như thế nào, hãy chắc rằng, bạn sẽ trở thành hình mẫu mà bạn muốn con cái mình trở thành trong tương lai.
Đừng uống cạn tài nguyên này, đừng ăn mặn để con cháu khát nước. Đừng để thế hệ nối tiếp thế hệ sống cuộc sống như thế này. Và xin cũng đừng, đừng xấu xa cho đã để rồi sau này bắt con mình trở thành một người tốt. Con nít học qua hình ảnh, nó bắt chước tất cả những gì nó thấy. Đừng bao giờ cho phép bản thân tệ hại, và dạy con bằng cái lối nói rằng bạn dù có xấu xa thế nào cũng là hy sinh cho tương lai của nó. Bởi vì, cách đó nhàm quá rồi, một lời biện hộ không có nghĩa gì hết.
Tôi biết là Việt Nam vẫn chưa đến lúc có một cuộc cách mạng cải tổ lại tư duy người Việt. Nhưng từ giờ cho tới lúc đó, hy vọng tôi có thể giúp ai đó hiểu rằng, hãy luyện tập, hãy chịu đựng để bước đi những ngày tháng trưởng thành. Bạn không thể lớn thêm nếu không chịu đựng. Nếu bạn muốn đi lên, bạn phải chịu đựng, dù xung quanh không có ai hỗ trợ bạn, dù xung quanh mọi người đang say ngủ…
NẾU BẠN MUỐN TRƯỞNG THÀNH, HÃY CHỊU ĐỰNG
Trong nghĩa của từ chịu đựng, không có lười biếng. Trong nghĩa của từ chịu đựng là sức mạnh. Mỗi một cá nhân có sức mạnh, khỏi cần phải bàn tới chuyện đất nước có đi lên hay không, vì đôi tay của họ thậm chí có thể nhấc bổng cả bầu trời…
(Nếu bạn nào đặt một dấu chấm hỏi vì sao bài trước tôi viết là chẳng có ai lười thì bài này tôi lại đỗ lỗi cho việc người ta lười, thì xin hãy hiểu rõ là trong 2 bài tôi đang đề cập đến 2 chuyện khác nhau. Bài trước là cảm thông với những người chưa tìm ra họ là ai trong cuộc đời. Bài này nói về những con người xung quanh tôi mà đầu óc bị mụ mẫm hóa hết rồi, không còn biết gì ngoài những lạc thú tầm thường nữa.)