2008年10月6日 星期一

Install openSUSE 11.0

七月初的時候,因為當初硬碟分割規劃不良,造成很多困擾,上網拍買了一顆
80G 的二手硬碟,將資料備份,原本的硬碟重新分割,再重灌 XP ,剛好那時候
openSUSE 11.0 剛發行兩個多月,就下載 Live CD Gnome 來測試,用起來感覺
不錯,就下載完整的 DVD 來安裝使用,到現在也將近兩個多月了,還算順手,
應該不會再換回 XP 了,四年前高中畢業那個暑假買的「鳥哥的 LINUX 私房
菜」總算重見天日,以後這個分類會拿來紀錄一些使用心得。

電腦硬體環境:
  • CPU : AMD Sempron 2600+
  • MB : MSI K7N2 Delta-L
  • Memory : Transcend DDR 400 1.5 G
  • VGA : Leadtek WinFast A 7300 GT TDH ( 256MB DDR2 )
  • HD : Seagate 80G * 2 、WD 120 G
  • DVD : Pioneer DVR 109
  • Sound Card : Terratec Aureon X fire 1723
  • TV Card : Leadtek WinFast TV2000 XP Expert
安裝:
  1. Language : English ( 中文字體不好看 =.= )
  2. Desktop Seletion : GNOME
  3. Partitioning : 之前有用 Spfdisk 分割 10 G 的空間,然後格式化成 ext 3 ,安裝的時候有抓到,並且建議再分割成更小的磁區,就照建議的下去分割
  4. User Settings : 跟 root 設定不同密碼,並且不自動登入,可收取系統郵件
  5. Automatic Configuration : 選擇自動設定,但後來發現我錯了,有些東西還是要手動設定(像是網路就花了我好一段時間)
基本設定:
  • 網路 : 原本由 yast 內的 DSL 和 Network Setting 去設定,但是設定完 dsl0 ,就會關掉 eth0 ,反之亦然,莫名其妙的令人火大,後來參考書上所寫,在 console 用 su 變成 root ,下 ifup 來啟動,再去 /etc/sysconfig/network/ 裡改一下 ifcfg-dsl0 和 ifcfg-eth0 ,STARTMODE 改成 auto ,開機以後就會自動連線了
  • 顯示卡 : Nvidia 有提供 Linux 下的驅動程式 ,而且還有 SUSE 的 HOWTO , 很不幸的是,照著上面的指示用 yast 安裝後沒辦法正常使用,最後還是下載了 NVIDIA-Linux-x86-173.14.09-pkg1.run ,切換到 tty1 後,下 init 3 關掉 X ,再照網頁所指示的進行安裝,完成會自動啟動 XGL ,效果很漂亮,但是會造成 PCmanX 出現畫面延遲,上一個畫面的字體常常會殘留,最後還是把 Desktop Effect 給關掉,比較實在
  • 中文輸入 : 安裝 scim ,但是使用上有點不太順手,或許改天可以試試 gcin
大致上安裝就是這樣,有網路和中文輸入就可以查到解決問題的方法,其他比較
瑣碎的部份,有空再寫。( 遙遙無期 )

2008年10月5日 星期日

10107 What is the Median?

之前解的時候沒有想很多,直接用內建的 qsort 去排序,後來整理
解答的時候才發現換到新系統後,時間會超出限制所以改用
binary insertion sort (應該是),就可以把原本的 TLE 縮減到 0.03 秒,
接下來還有 10170 和 100 要改...Orz

2008年9月26日 星期五

837 Light and Transparencies

題目網頁:http://acm.uva.es/problemset/v8/837.html

因為題目有提到,沒有垂直 X 軸的線 (同一條線的 x1 != x2),所有 film 的兩端也不會重疊 (每個 x 都是獨一無二的點),所以就不必管 y ,將所有的 x 作排序後,再做計算,看看跟哪些 film 有重疊,來計算 r 是多少,不同 segment 的判斷,是由兩端的 x 值來決定,而不是 r ,討論區裡的 sample input 有些是錯誤的,沒有什麼特殊的 input ,不要想太多就可以 AC 了 。

2008年7月22日 星期二

memory address and Little-Endian

最近看了一些有關 Big-Endian 與 Little-Endian 的資料,就寫個小程式觀察一下

編譯環境:Windows XP、minGW

#include <stdio.h>
#include <limits.h>

int main(){

long a,b[6];
printf("int max =%d\tlong max=%d\n\n",INT_MAX,LONG_MAX);
printf("address of variables(a defined first):\n");
printf("b[0]\tb[1]\tb[2]\n%u\t%u\t%u\n\n",&b[0],&b[1],&b[2]);
printf("b[4]\tb[5]\ta\n%u\t%u\t%u\n\n",&b[4],&b[5],&a);

a=0x1234abcd;
printf("about endian:\n\n");
printf("set a's value = %x\n\n",a);
unsigned char *ptr;
ptr=(unsigned char *)&a;
printf("value store in the bytes of a\n1st\t2nd\t3rd\t4th\n");
printf("%x\t%x\t%x\t%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3));

return 0;
}



學到的幾點:
  1. 這個編譯環境下,int 與 long 最大值相同 ( C90 的 INT_MAX 為 32,767),所使用 byte 數也相同。
  2. 變數的記憶體位址是後宣告的在前面,而且有些沒有用到 (可見參考網頁)。
  3. 目前大部分的 CPU 都是使用 Little-Endian
參考網頁
用 C 語言窺探記憶體
http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml

2008年7月12日 星期六

預設一開機便自動登入某帳號 ( Windows XP )

1. 開始 -> 執行 -> 「control userpasswords2」

2. 先選取要登入的帳號

3. 取消 「必須輸入使用者名稱和密碼,才能使用這台電腦」

4. 點選「套用」

另外發現,在「cmd」 下輸入此指令也可運作,輸入「control」則會出現「控制台」。

2008年7月7日 星期一

828 Deciphering Messages

題目網頁:http://acm.uva.es/problemset/v8/828.html

莫名其妙卡很久的題目,照題意不難解,只是有些例外要多想一下。

Sample Input:
3

RSAEIO
2
5
RTSSKAEAGE
GRSCAV
RGSSCAV
RUSIQO
RUSSGAACEV JEGIITOOGR

AABBCCDDEEFFGHVXYZ
28
3
AJAAGBNNQ
AAAACBBJBQQ
AZAAABBBB

ABC
5
3
AFBBFCCFA
AXB
AFBBFCCFAAFBBFCCFAAFBBFCCFA

Sample Output:

RICE
error in encryption
EAT
error in encryption
SEAT HERE

HELLO
YAHOO
XYZ

AAA
VSW
AAAAAAAAA

2008年6月29日 星期日

Windows 關閉自動執行 (Autorun) 功能

根據 避免隨身碟病毒,只需 1 招 ,之前常見的一些預防隨身碟病毒的方法,像是 以右鍵開啟隨身碟…似乎都沒有太大效用,網路上另外找到一個方法,不知道有沒有用,反正多一層保護也沒差,根本之道還是要培養良好的電腦使用習慣,才能避免中毒。


1. 開始 -> 執行 -> regedit

2. 找到 「 HKEY_CURRENT_USER\Software\microsoft\Windows\
CurrentVersion\Explorer\MountPoints2 」

3. 按右鍵選擇 「使用權限

4. 新增使用者 Everyone

5. 完全控制權限設定為「拒絕

資料來源:
http://xzjiang.blogspot.com/2008/06/windows-autorun.html

本文依原文授權採

姓名標示-非商業性-相同方式分享 2.5 台灣授權條款

2008年6月24日 星期二

ASCII control characters


reference:wikipedia - ASCII control characters

以後要輸出 new line 時,就只要 putchar(10); 就好了,比 printf 少打很多字 XDD~

scanf("") - 參

input case:存在 input.txt 內
1

RSAEIO
2
5
RTSSKAEAGE

程式碼:
#include <stdio.h>

int main(){

freopen("input.txt","r",stdin);
char input;
while(input!='5'){
scanf("%c",&input);
printf("%d - \t %c\n",input,input);
}
return 0;
}

output:
49 - 1
10 -

10 -

82 - R
83 - S
65 - A
69 - E
73 - I
79 - O
10 -

50 - 2
10 -

53 - 5

如果把 scanf("%c",&input); 改成
  • scanf("%c ",&input); (%c 後面加空白)
  • scanf(" %c",&input); (%c 前面加空白)
  • scanf("%c\n",&input); (%c 後面加 \n )
  • scanf("\n%c",&input); (%c 前面加 \n )
會得到同樣的 output
49 - 1
82 - R
83 - S
65 - A
69 - E
73 - I
79 - O
50 - 2
53 - 5
更有趣的是,如果將 scanf() 與 gets 合用
#include <stdio.h>

int main(){
freopen("input.txt","r",stdin);
char input,line[50];
while(scanf("%c",&input)!=EOF){
printf("%d - \t %c\n",input,input);
gets(line);
printf("gets - %d\t%c\t",line[0],line[0]);
puts(line);
}
return 0;
}

output 變成:
49 - 1
gets - 0
10 -

gets - 82 R RSAEIO
50 - 2
gets - 0
53 - 5
gets - 0
82 - R
gets - 84 T TSSKAEAGE
因為 scanf() 把第一個字讀進去後,下一個字元是 '\n' ,gets() 讀取到 '\n' 就會停止讀取,並且附加一個 null character 在字串尾端,而這個字串又沒有任何字元,才會出現 line[0]=0 的狀況,如果將原本的 scanf() 改成 scanf("%c ",&input); (%c 後面加上空白),output 就會變成

49 - 1
gets - 82 R RSAEIO
50 - 2
gets - 53 5 5
82 - R
gets - 84 T TSSKAEAGE

input 裡面的 '\n' 都會被跳過,直接讀取一般的字母。

嗯,昨天我在這邊卡了將近一個小時...

2008年6月18日 星期三

701 The Archeologists' Dilemma

題目網頁:http://acm.uva.es/p/v7/701.html

卡了有點久,看了別人解法才發現這題竟然這麼簡單…
公式如下:
N*10^n < 2^k < (N+1)*10^n
log10(N)+n < k*log10(2) < log10(N+1)+n
log10(N) < k*log10(2)-n < log10(N+1)
find if k exist

另外,k 如果最大值設 32,767 (int)會 WA ,如果設成 2,147,483,647 (long)就可以順利 AC

2008年5月28日 星期三

char *strtok(char *str1, const char *str2)

屬於 string.h 的一個好用函式,可以將一個字串分割成一個一個的 token,第一次將 str1 傳給它以後,接著再呼叫此函式時,使用 NULL 當 str1,會自動接續到前一個 token 後面繼續讀,可以看看第一份參考資料的例子,再讀讀第二份參考資料的解釋,會比較容易瞭解,另外有一點要注意的是,str1 不是 const 型態,strtok 會修改 str1 這個字串裡面的資料,將包含有 str2 的字元改成 ' \0 ',所以接下來只能透過它所回傳的 pointer 來繼續使用這個字串,如果使用上出現問題,可以檢查自己所傳的 str1 有沒有問題 ( 剛剛 Google 時,看到某個人的血尿控訴 XDD~ )。

Example:
char *p_token,input[50]="Hamdy@Cairo Conrado@MexicoCity"
puts(input);
p_token=strtok(input,"@ \0");
strcpy(sender[0],p_token);
puts(input);
p_token=strtok(NULL,"@ \0");
strcpy(sender[1],p_token);
puts(input);
putchar('\n');
puts(sender[0]);
puts(sender[1]);

呼叫兩次 strtok() ,將所得到的 token 分別存進 sender[0] 與 sender[1] 兩個字元陣列,然後印出呼叫前與呼叫後的 input,得到的結果是
Hamdy@Cairo Conrado@MexicoCity
Hamdy
Hamdy

Hamdy
Cairo

參考資料:
http://www.cplusplus.com/reference/clibrary/cstring/strtok.html
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.14.html#strtok

2008年5月21日 星期三

Customize GNU Emacs On Windows

1. Set " Home Directory ":
  • 「Start Menu」 -> 「Run」 -> Enter " regedit "
  • 「HKEY_CURRENT_USER \ Software \ GNU \ Emacs」(If not exist , your can add those keys by yourself),add a Value 「HOME」,fill in the path You want to use for Home Directory
  • Typing " C-x d ~/ " in Emacs to see if you have changed the Home Directory's location
2. Customize Emacs :
  • Create a file named " .emacs " in your Home Directory
  • Use this file to customize your Emacs with Emacs Lisp,I changed the background color and the font," M-x describe-font " is a useful command :)
  • following is my " .emacs "
(set-background-color "WhiteSmoke")
(set-face-font 'default "-outline-Bitstream Vera Sans Mono-normal-r-normal-normal-15-112-96-96-c-*-iso8859-1")

Reference:
Installing Emacs (GNU Emacs FAQ For MS Windows)
Emacs Lisp
(GNU Emacs Lisp Reference Manual)
Set Fonts (Emacs Wiki)

2008年5月8日 星期四

739 Soundex Indexing

題目網頁:http://online-judge.uva.es/problemset/v7/739.html

我是用 gets() 讀名字進來,結果 WA 了兩三次,後來才發現可能是 EOF 的問題,改成
while(gets(input)!=NULL&&isupper(input[0])!=0)


就順利 AC 了 :)

2008年4月29日 星期二

Uninstall Cygwin

Reference:Cygwin FAQ - http://cygwin.com/faq/faq-nochunks.html

1. Uninstall Cygwin service
  • List all service:cygrunsrv -L
  • Stop the service:cygrunsrv --stop service_name
  • Remove the service:cygrunsrv --remove service_name
2. Back Your Home Directory (Optional)

3. Delete the Cygwin root folder and all subfolders (Which takes lots of time =.=)

4. Delete the Cygwin shortcuts on the Desktop and Start Menu, and anything left by setup.exe in the download directory

2008年2月15日 星期五

ACM待解

討論區上說最簡單的題目:
308,316,895,898,10194,10206,10209,10300,10340,10469,10473,10499,10550,10565,10589,10673,10696,10783,10789,10812,10878,10903,10924,10929,10963,11059,11172,11185,10290,10608,10702

想解的:
http://acm.uva.es/p/v1/140.html
http://acm.uva.es/p/v101/10176.html
http://acm.uva.es/p/v110/11020.html
http://acm.uva.es/p/v100/10034.html
http://acm.uva.es/p/v110/11038.html
http://acm.uva.es/p/v103/10307.html
http://acm.uva.es/p/v110/11032.html
http://acm.uva.es/p/v110/11096.html
http://acm.uva.es/p/v100/10094.html
http://acm.uva.es/p/v100/10032.html
http://acm.uva.es/p/v110/11043.html
http://acm.uva.es/p/v110/11045.html
http://acm.uva.es/p/v110/11047.html
http://acm.uva.es/p/v9/944.html
http://acm.uva.es/p/v110/11007.html

ACM 討論區:
http://acm.uva.es/board/

以前的解題紀錄(現在搬到新網站,不能這樣看了):
http://acm.uva.es/problemset/usersnew.php?user=25917&mode=1

2008年2月9日 星期六

解決工作列小圖示自動載入問題

我遇到的問題在於右下角的工作列,也就是會顯示你目前開啟哪些程式的地方 ( 通常有音量、網路狀態… ),有些常駐程式開機以後就會自動載入以保護作業系統能正常運作(如防火牆、防毒軟體…)或是某些隨硬體附上的控制程式 ( 如音效卡、顯示卡… ),現在這台電腦距離上次重灌大概也有兩年了,偶爾開機以後工作列只出現一部分小圖示,其他則是消失不見,但程式仍有正常運作,從工作管理員裡面也可以看到,只是沒辦法再次開啟那些程式的GUI ( 如防火牆的控制介面或音效卡自己的音量調整 ),必須利用工作管理員將之強制關閉,重新啟動那個程式後,小圖示會再次出現,也能正常使用它的控制介面,大部分消失的都是防火牆 ( Outpost Free ) 和音效卡的控制程式 ( XFire 1723 ),後來防火牆換成 COMODO Firewall Pro 也有一樣的問題出現,本以為要重灌才能解決,看了參考資料後,稍微更改一些設定,目前開機一切正常,問題不再出現。

解決方法如下:
我的電腦(或是點選 " 開始 " ) -> 網路上的芳鄰 ->
在左邊的 " 網路工作 " 中點選 " 隱藏已連接網路 UPnP 裝置的圖示 "
重新開機以後應該就能正常顯示

這個方法對我來說很有用,參考資料中還有列出其他的解決方案,如果這個方法行不通的話,可以參考那篇文章看看。

參考資料:
Systray icons missing
http://winhlp.com/node/16

2008年1月22日 星期二

解決 0x0000007E 錯誤 (開機出現藍底白字畫面)

首先可以參考微軟的兩篇疑難排解

疑難排解 Windows XP 的啟動問題
http://support.microsoft.com/kb/308041/

如何將 Windows XP 設定為在「初始狀態開機」狀態中啟動
http://support.microsoft.com/kb/310353/


而我的狀況是:

啟動 XP 就出現藍底白字畫面,顯示 0x0000007E error ,請移除新安裝的程式之類的鬼東西,但可成功進入安全模式。
  1. 先拔除新安裝的硬碟 : 沒有用,不是硬碟衝到。
  2. 拆下記憶體清一清,換另一個插槽:還是沒用。
  3. 按照第二篇疑難排解調整系統設定公用程式:沒用,還是進不去。
接著突然看到錯誤訊息中有建議可以更換 Video Adapter ,就靈機一動把原本顯示卡附的官方 Driver 移除掉,重開機,Bingo!可以正常啟動 XP 了,後來到 nVidia 官網去抓最新的 Driver 來安裝,從此相安無事,和樂融融,天下太平~

比較奇怪的是,這顯示卡從一年半以前到現在用起來都好好的,最近也沒裝啥奇怪的軟體或更新驅動程式,問題竟然出在它身上,真讓我始料未及…會不會是微軟更新的錯呢??(顯示卡是Winfast PX7300 GT)