先給個作業吧~
在9/14號前
要總題數要做到100題↑(之前寫的包含在裡面)
其中三星題要有十題~
收到的就回應一下吧~
//團訓在最近的週末就會復活了,似乎可以約出來一起寫了XD
公告區
Work Harder!!!!
2009年7月1日 星期三
2009年6月20日 星期六
2009年6月8日 星期一
2009年6月7日 星期日
5/31團練記錄:ACM 260
團練主題:State Space Search
這一次的題目比較簡單
因為白及黑的行為模式已經確立
而且題目又很準確的說
「不會平手」
所以比較投機的方式就是只檢查一方會不會贏XD
//拖了這麼久才po真抱歉 冏
/*Applerman's AC code*/
#include< stdio.h>
int N, map[200][200],win,check[200][200];
int move[6][2]={{-1,-1},{-1,0},{0,-1},{1,0},{0,1},{1,1}};
int isBound(int i,int j);
void move_W(int i,int j);
void check_W(int i,int j);
int init(int N);
int main(){
int case_N=1,i,j;
char win_C[2]={'B','W'},str[201];
while(scanf("%d\n",&N)==1){
if(N==0) break;
for(i=0;i< N;i++){
gets(str);
for(j=0;j< N;j++)
if(str[j]=='w') map[i][j]=1;
else if(str[j]=='b') map[i][j]=0;
}
init(N);
win=0;
for(i=0;i< N&&(!win);i++)
if(map[i][0]&&check[i][0])
check_W(i,0);
printf("%d %c\n",case_N++,win_C[win]);
}
return 0;
}
int isBound(int i,int j){
if( (0< =i&&i< N) && (0< =j&&j< N) )
return 1;
return 0;
}
void check_W(int i,int j){
int k;
check[i][j]=0;
if((j==(N-1)&&map[i][j]==1)||win==1){
win=1;
return;
}
for(k=0;k< 6;k++)
move_W(i+move[k][0],j+move[k][1]);
return ;
}
void move_W(int i,int j){
if(isBound(i,j))
if(map[i][j]&&check[i][j]) check_W(i,j);
}
int init(int N){
int i,j;
for(i=0;i< N;i++)
for(j=0;j< N;j++)
check[i][j]=1;
}
這一次的題目比較簡單
因為白及黑的行為模式已經確立
而且題目又很準確的說
「不會平手」
所以比較投機的方式就是只檢查一方會不會贏XD
//拖了這麼久才po真抱歉 冏
2009年5月28日 星期四
2 Examples
Report Card :
ID,CourseName01,Grade01,CourseName02,Grade02,......
1,國文上,92,普通物理學甲上,100,計算機程式設計,100
Account_Password :
account,password
b97902020,neverRevoke
ID,CourseName01,Grade01,CourseName02,Grade02,......
1,國文上,92,普通物理學甲上,100,計算機程式設計,100
Account_Password :
account,password
b97902020,neverRevoke
JAVA - 字串轉換
1. 由 基本資料型態轉換成 String
String 類別中已經提供了將基本資料型態轉換成 String 的 static 方法
也就是 String.valueOf() 這個參數多載的方法
有下列幾種
String.valueOf(boolean b) : 將 boolean 變數 b 轉換成字串
String.valueOf(char c) : 將 char 變數 c 轉換成字串
String.valueOf(char[] data) : 將 char 陣列 data 轉換成字串
String.valueOf(char[] data, int offset, int count) :
將 char 陣列 data 中 由 data[offset] 開始取 count 個元素 轉換成字串
String.valueOf(double d) : 將 double 變數 d 轉換成字串
String.valueOf(float f) : 將 float 變數 f 轉換成字串
String.valueOf(int i) : 將 int 變數 i 轉換成字串
String.valueOf(long l) : 將 long 變數 l 轉換成字串
String.valueOf(Object obj) : 將 obj 物件轉換成 字串, 等於 obj.toString()
用法如:
int i = 10;
String str = String.valueOf(i);
這時候 str 就會是 "10"
2. 由 String 轉換成 數字的基本資料型態
要將 String 轉換成基本資料型態轉
大多需要使用基本資料型態的包裝類別
比如說 String 轉換成 byte
可以使用 Byte.parseByte(String s)
這一類的方法如果無法將 s 分析 則會丟出 NumberFormatException
byte :
Byte.parseByte(String s) : 將 s 轉換成 byte
Byte.parseByte(String s, int radix) : 以 radix 為基底 將 s 轉換為 byte
比如說 Byte.parseByte("11", 16) 會得到 17
double :
Double.parseDouble(String s) : 將 s 轉換成 double
float :
Double.parseFloat(String s) : 將 s 轉換成 float
int :
Integer.parseInt(String s) : 將 s 轉換成 int
long :
Long.parseLong(String s) : 將 s 轉換成 long
String 類別中已經提供了將基本資料型態轉換成 String 的 static 方法
也就是 String.valueOf() 這個參數多載的方法
有下列幾種
String.valueOf(boolean b) : 將 boolean 變數 b 轉換成字串
String.valueOf(char c) : 將 char 變數 c 轉換成字串
String.valueOf(char[] data) : 將 char 陣列 data 轉換成字串
String.valueOf(char[] data, int offset, int count) :
將 char 陣列 data 中 由 data[offset] 開始取 count 個元素 轉換成字串
String.valueOf(double d) : 將 double 變數 d 轉換成字串
String.valueOf(float f) : 將 float 變數 f 轉換成字串
String.valueOf(int i) : 將 int 變數 i 轉換成字串
String.valueOf(long l) : 將 long 變數 l 轉換成字串
String.valueOf(Object obj) : 將 obj 物件轉換成 字串, 等於 obj.toString()
用法如:
int i = 10;
String str = String.valueOf(i);
這時候 str 就會是 "10"
2. 由 String 轉換成 數字的基本資料型態
要將 String 轉換成基本資料型態轉
大多需要使用基本資料型態的包裝類別
比如說 String 轉換成 byte
可以使用 Byte.parseByte(String s)
這一類的方法如果無法將 s 分析 則會丟出 NumberFormatException
byte :
Byte.parseByte(String s) : 將 s 轉換成 byte
Byte.parseByte(String s, int radix) : 以 radix 為基底 將 s 轉換為 byte
比如說 Byte.parseByte("11", 16) 會得到 17
double :
Double.parseDouble(String s) : 將 s 轉換成 double
float :
Double.parseFloat(String s) : 將 s 轉換成 float
int :
Integer.parseInt(String s) : 將 s 轉換成 int
long :
Long.parseLong(String s) : 將 s 轉換成 long
2009年5月24日 星期日
5/24團練結果-ACM10325及ACM10228
團練參考網址:
Inclusion-Exclusion Principle
http://www.csie.ntnu.edu.tw/~u91029/Inclusion-ExclusionPrinciple.html
Extremum
http://www.csie.ntnu.edu.tw/~u91029/Extremum.html
團練討論:
ACM10325:
須使用long long 避免WA
如以下測資
2000000000 14
1073741789 1073741783 1073741741 1073741723 1073741719 1073741717 1073741689 1073741671 1073741663 1073741651 1073741621 1073741567 1073741561 1073741527
答案是1999999986
long long 在dev c++使用%I64d;
在Linux下使用 %lld
上傳皆使用%lld
ACM10228:
這題除了演算法,還要用些數學概念
切割xy平面去找極小值,
這題無特定公式可以直接求解,
在xy平面上,每一點對應到一個f(x,y)
f(x,y)即為一個曲面函數
求曲面上極大極小值要用lagrange
所以這題直接用切割平面的方式找極小較為容易
這意這題f(x,y)只出現一個極值,故可以不必分段找極大極小
因為他只有一個極小。
Inclusion-Exclusion Principle
http://www.csie.ntnu.edu.tw/~u91029/Inclusion-ExclusionPrinciple.html
Extremum
http://www.csie.ntnu.edu.tw/~u91029/Extremum.html
/*JW's AC Code in ACM 10325*/
#include<stdio.h>
#define MAX 16
long long n,m;
long long marray[MAX];
void init(long long array[MAX])
{
long long i;
for(i=0;i<MAX;i++)array[i] = 0;
}
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long lcm(long long a,long long b)
{
return a/gcd(a,b)*b;
}
long long backtrack(long long c,long long w,long long d)
{
if(c==m)return w*(n/d);
return backtrack(c+1,w,d)+backtrack(c+1,-w,lcm(d,marray[c]));
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
init(marray);
long long i;
for(i=0;i<m;i++)scanf("%lld",&marray[i]);
printf("%lld\n",backtrack(0,1,1));
}
return 0;
}
/*ApplerMan's AC code in ACM 10228*/
#include<stdio.h>
#include<math.h>
double countDistance(double x1,double y1,double x2,double y2){
return pow((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2),0.5);
}
double totalDistance(int N,double point[100][2],double x,double y){
int i;
double total=0;
for(i=0;i<N;i++){
total+=countDistance(x,y,point[i][0],point[i][1]);
}
return total;
}
double xbisection(int N,double point[100][2],double y,double a, double b){
double fa,fb,c=(a+b)/2,fc=totalDistance(N,point,c,y),d;
for(d=fabs(b-a)/4;d>1e-5;d/=2){
a=c-d,b=c+d,fa=totalDistance(N,point,a,y),fb=totalDistance(N,point,b,y);
if(fa<fc) c=a,fc=fa;
else if(fb<fc) c=b,fc=fb;
}
return fc;
}
double ybisection(int N,double point[100][2],double a,double b){
double fa,fb,c=(a+b)/2,fc=xbisection(N,point,c,0,10000),d;
for(d=fabs(b-a)/4;d>1e-5;d/=2){
a=c-d,b=c+d,fa=xbisection(N,point,a,0,10000),fb=xbisection(N,point,b,0,10000);
if(fa<fc) c=a,fc=fa;
else if(fb<fc) c=b,fc=fb;
}
return fc;
}
int main(){
int M,N,i;
double point[100][2];
scanf("%d",&M);
while(M--){
scanf("%d",&N);
for(i=0;i<N;i++) scanf("%lf %lf",&point[i][0],&point[i][1]);
printf("%.lf\n",ybisection(N,point,0,10000));
if(M>0) printf("\n");
}
return 0;
}
團練討論:
ACM10325:
須使用long long 避免WA
如以下測資
2000000000 14
1073741789 1073741783 1073741741 1073741723 1073741719 1073741717 1073741689 1073741671 1073741663 1073741651 1073741621 1073741567 1073741561 1073741527
答案是1999999986
long long 在dev c++使用%I64d;
在Linux下使用 %lld
上傳皆使用%lld
ACM10228:
這題除了演算法,還要用些數學概念
切割xy平面去找極小值,
這題無特定公式可以直接求解,
在xy平面上,每一點對應到一個f(x,y)
f(x,y)即為一個曲面函數
求曲面上極大極小值要用lagrange
所以這題直接用切割平面的方式找極小較為容易
這意這題f(x,y)只出現一個極值,故可以不必分段找極大極小
因為他只有一個極小。
2009年5月23日 星期六
2009年5月21日 星期四
UML - Class
class Course {
int courseID;
int credit
String courseName;
String professorName;
boolean[] student;
String department;
int restrictionID;
int[] time;
String location;
String P.S.;
}
class Human {
String name;
int ID;
}
class Student extends Human {
String department;
Schedule mySchedule;
}
class Prfessor extends Human {
String department;
}
class Administrator extends Human {
}
class Schedule {
String[] timeTable;
Course[] courses;
}
class ReportCard {
double[] grade;
String[] courseName;
int ID;
}
class OldSystem {
}
JAVA - 其他技術
這個是用來停止的
下面是停止兩秒
這是用來刷掉螢幕的
似乎是控制碼
可跨平台
下面是停止兩秒
try {
Thread.sleep(2000L); //2 Seconds
}
catch (Exception e) {}
這是用來刷掉螢幕的
似乎是控制碼
可跨平台
System.out.println(((char) 27)+"[2J");
JAVA - 檔案處理
發現BufferedReader還好用的
大家還是多學學比較好
這個裡面有包含讀和寫了
大家還是多學學比較好
這個裡面有包含讀和寫了
import java.io.*;
public class FileIO {
public static void main(String[] args) throws IOException {
BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
String fileName = keyin.readLine();
FileReader fileInput = new FileReader(fileName);
BufferedReader fr = new BufferedReader(fileInput);
String Temp;
String Data = "";
while((Temp = fr.readLine()) != null)
Data += Temp + "\n";
System.out.println(Data);
fileName = keyin.readLine();
FileWriter fw = new FileWriter(fileName);
fw.write(Data);
fw.flush(); //This is important,without it,the file won't be written.
}
}
Java的getch()
getch()在c當中
是用來讀入字元
但是不用按enter就會進行下去
簡單講就是「press any key to continue」的功能
在小的用盡全力google了兩天後
確定是沒這個東西了
所以設計出來的感覺可能會有些不一樣
之後請問田神後
知道還有「jni」可以試試(據說是讓java去跑c的code)
不過會造成沒辨法跨平台
再取捨吧~
是用來讀入字元
但是不用按enter就會進行下去
簡單講就是「press any key to continue」的功能
在小的用盡全力google了兩天後
確定是沒這個東西了
所以設計出來的感覺可能會有些不一樣
之後請問田神後
知道還有「jni」可以試試(據說是讓java去跑c的code)
不過會造成沒辨法跨平台
再取捨吧~
2009年5月20日 星期三
JAVA - Keyboard Input
正如蘋果人所言
在java 6 之後
多了這個方法來讀取
十分的方便
不過在esclipse中不能使用
請注意
還有更方便的
輸入之後不顯示出來
這在打密碼時很重要
在java 6 之後
多了這個方法來讀取
十分的方便
不過在esclipse中不能使用
請注意
import java.io.Console;
public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");
Console console = System.console();
String name = console.readLine();
System.out.println("您輸入的名稱:" + name);
}
}
還有更方便的
輸入之後不顯示出來
這在打密碼時很重要
import java.io.Console;
public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");
Console console = System.console();
String name = console.readLine();
char[] password = console.readPassword("請輸入密碼:");
System.out.println("您輸入的名稱:" + name);
System.out.println("您輸入的密碼:" + new String(password));
}
}
UML - flow of event 工作分配
1. Login - 3M
2. View Course - JW
3. Register Course - JW
4. Distribute Course - JW
5. Add Course - 3M
6. Give Out Result - AP
7. View Report Card - DP
8. Submit Grade - DP
9. Billing - AP
10. Grading - DP
2. View Course - JW
3. Register Course - JW
4. Distribute Course - JW
5. Add Course - 3M
6. Give Out Result - AP
7. View Report Card - DP
8. Submit Grade - DP
9. Billing - AP
10. Grading - DP
2009年5月18日 星期一
2009年5月16日 星期六
UML
Use Case Diagram
JW-Course Registration System
AP-Billing System
3M-Login System
//-The Relationship between systems
3M-Old System VS New System
DP-Report Card System
Class Diagram
3M-Log in
-New System
-User Account
-Student
-Professor
-Administrator
JW-View Courses
-Student
-Professor
-Administrator
-Courses
-New System
JW-Courses Register
-Student
-New System
-Course
-Schedule
-Report Card
-Professor
JW-Add Course
-Professor
-New System
-Course
AP-Distribute Course
-New System
-Course
-Schedule
-Bill
AP-Result
-Bill
-Student
-New System
-Schedule
-Professor
-Course
DP-Grading
-New System
-Report Card
-Professor
DP-View Report Card
-Student
-Report Card
-New System
DP-Submit grades
-Old System
-New System
-Administrator
-Report Card
JW-Course Registration System
AP-Billing System
3M-Login System
//-The Relationship between systems
3M-Old System VS New System
DP-Report Card System
Class Diagram
3M-Log in
-New System
-User Account
-Student
-Professor
-Administrator
JW-View Courses
-Student
-Professor
-Administrator
-Courses
-New System
JW-Courses Register
-Student
-New System
-Course
-Schedule
-Report Card
-Professor
JW-Add Course
-Professor
-New System
-Course
AP-Distribute Course
-New System
-Course
-Schedule
-Bill
AP-Result
-Bill
-Student
-New System
-Schedule
-Professor
-Course
DP-Grading
-New System
-Report Card
-Professor
DP-View Report Card
-Student
-Report Card
-New System
DP-Submit grades
-Old System
-New System
-Administrator
-Report Card
2009年5月3日 星期日
5/3團練記錄
參考網站:http://www.csie.ntnu.edu.tw/~u91029/Permutation.html
做了一題練習
因為在審題上出了問題
An upper case letter goes before the corresponding lower case letter.
這一句話的意思是
當我們在排序時
大寫是在小寫前面的
所以
比如說input是
AaBbCc
在沒有處理的前提下
第一個output可能會變成
ABCabc //也就是字典順序
這一點要注意
做了一題練習
因為在審題上出了問題
An upper case letter goes before the corresponding lower case letter.
這一句話的意思是
當我們在排序時
大寫是在小寫前面的
所以
比如說input是
AaBbCc
在沒有處理的前提下
第一個output可能會變成
ABCabc //也就是字典順序
這一點要注意
/*JW's AC Code in ACM 195*/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 1024
char Input[MAX]; //輸入
char ans[MAX]; //存排列的結果
char used[MAX]; //用過的
int cmp1(const void *a,const void *b)
{
return (*(char*)a-*(char*)b);
}
//Quick Sort用
int cmp2(const void *a,const void *b)
{
return (tolower(*(char*)a)-tolower(*(char*)b));
}
//排列
void p(int k,int len)
{
if(k==len)
{
int i;
for(i=0;i<len;i++)printf("%c",ans[i]);
printf("\n");
return;
}
char LastLetter='\0';
int i;
for(i=0;i<len;i++)
{
if(used[i]==0 && LastLetter!=Input[i])
{
LastLetter=Input[i];
used[i]=1;
ans[k]=Input[i];
p(k+1,len);
used[i]=0;
}
}
}
int main()
{
int N;
scanf("%d",&N);
int i;
for(i=0;i<N;i++)
{
scanf("%s",Input);
int len=strlen(Input);
int j;
for(j=0;j<len;j++)used[j]=0;
qsort(Input,len,sizeof(char),cmp1);
qsort(Input,len,sizeof(char),cmp2);
p(0,len);
}
return 0;
}
/*ApplerMan's AC Code in ACM 195*/
#include<stdio.h>
#include<string.h>
#define MAX 1000
int charNum[52],length;
char solution[MAX];//解答
void permutation(int k,int n){
int i;
if(k==n){
for(i=0;i<n;i++){
printf("%c",solution[i]);
}
printf("\n");
return ;
}
for(i=0;i<52;i++){
if(charNum[i]>0){
charNum[i]--;
if(i%2==0){
solution[k]=(i/2)+'A';//取出來
}
else{
solution[k]=(i/2)+'a';//取出來
}
permutation(k+1,n);
charNum[i]++;
}
}
}
void input(void){
int i;
char str[MAX];
gets(str);
length=strlen(str);
for(i=0;i<length;i++){
if('A'<=str[i]&&str[i]<='Z'){
charNum[(str[i]-'A')*2]++;//編入
}
else if('a'<=str[i]&&str[i]<='z'){
charNum[(str[i]-'a')*2+1]++;//編入
}
}
}
void init(void){
int i;
for(i=0;i<52;i++)
charNum[i]=0;
}
int main(void){
int N;
scanf("%d\n",&N);
while(N--){
init();//負責初始化
input();//輸入部分
permutation(0,length);//遞迴
}
return 0;
}
//charNum[0]表示A的數量
//charNum[1]表示a的數量
//charNum[2]表示B的數量
2009年5月1日 星期五
田神訪談記錄
Q1 老師當初是怎麼學的,如何從不會到能夠比ACM World Final?
在剛入大學時,和兩個IOI強者的高中同學組隊,也因此從同學那裡學到了很多,除了教會當時的教授不少東西之外,也提供了不少書籍作為參考,而教授本身對於閱讀書籍本來就有興趣,因此學到了很多,學習的方式則是辨固定時間的讀書會,一次兩到三個小時,當時由於Online Judge的網站剛開始出現,因此有一股風潮在資訊系出現,這樣的風氣也有一些幫助,到了大二時,開始更為嚴肅看待比賽這件事,而且當時大陸的隊伍也開始參賽了,所以壓力相對的也比較大,之後在努力之下才到了ACM World Final,在學習方面,教授認為,重點在於知道用什麼方法去解決一個問題,如何從數學的思考轉移到程式的演算法上的思考,同時教授也提出了一個以往自己的訓練的方式,就是一種在紙上寫程式的方法,這種方式可以鍛練自己在self compiling和self testing上的能力。
Q2 ACM比賽時的解題方向?
分析題目(找出比較ok的題目)
分出三種類別
第一類的題目重點在速度
第二類的題目重點在做出自己能力能及的題目
第三類的題目重點在於團隊合作解出(最難的部分)
Q3 現在的學習風氣和過去的感覺有什麼不同?
和過去比較起來,現在的機會多很多,並不是說不好,而是讓競爭的感覺沒有以前那麼強烈,過去的競爭壓力大,若是不努力的話,本來在你之後的人很快就會追上來,也因此才會加倍的努力。
Q4 我們這樣的練習方式妥不妥?也就是利用題目來磨練觀念。
剛開始是好方法,但長久來說還是把重點放在了解演算法的內容進而活用。
Q5 還有如何進步,是看別人寫的code嗎?哪裡有資源?
看別人寫的code是個不錯的方法,而且可能還蠻需要的,可以在其中找一些自己覺得很好的方式,進而內化了解,同時在比賽時,也有很高的可能性需要幫別人debug(包括平時),因此看別人的code是個不錯的學習方式,資源方面,可以看一些有solution和別人寫的code的地方,例如NTU online judge,如果需要的話,可以和助教伸帳號。
Q6 這些比賽對於未來的幫助。
可能有,但是大多數的時候,能夠在比賽中有所表現的人,在各方面的課業表現上都不會太差,也因此我們不能說有絕對的關係,但不論之後在比賽有沒有得到好成績,若是願意在這方面努力的話,實力就會有一定程度的累積,那就夠了。
Q7 ACM比賽的學習和準備上的方法。
重點在還是在於有固定的讀書會,首先可以先召集一些人(約3-5個),然後可以先讓每個人分享一下自己學到的一些演算法之類的,並且一起練習分享等,頻率方面則是一個到兩個星期一次,一次兩到三個小時。
----------------------------------------------------------------------------------
因為是隔了一天才整理好,內容方面可能會有一點出入,所以任何覺得怪怪的地方都有可能是我寫錯了,也可能是記錄時誤解教授的意思,有問題請提出吧~
在剛入大學時,和兩個IOI強者的高中同學組隊,也因此從同學那裡學到了很多,除了教會當時的教授不少東西之外,也提供了不少書籍作為參考,而教授本身對於閱讀書籍本來就有興趣,因此學到了很多,學習的方式則是辨固定時間的讀書會,一次兩到三個小時,當時由於Online Judge的網站剛開始出現,因此有一股風潮在資訊系出現,這樣的風氣也有一些幫助,到了大二時,開始更為嚴肅看待比賽這件事,而且當時大陸的隊伍也開始參賽了,所以壓力相對的也比較大,之後在努力之下才到了ACM World Final,在學習方面,教授認為,重點在於知道用什麼方法去解決一個問題,如何從數學的思考轉移到程式的演算法上的思考,同時教授也提出了一個以往自己的訓練的方式,就是一種在紙上寫程式的方法,這種方式可以鍛練自己在self compiling和self testing上的能力。
Q2 ACM比賽時的解題方向?
分析題目(找出比較ok的題目)
分出三種類別
第一類的題目重點在速度
第二類的題目重點在做出自己能力能及的題目
第三類的題目重點在於團隊合作解出(最難的部分)
Q3 現在的學習風氣和過去的感覺有什麼不同?
和過去比較起來,現在的機會多很多,並不是說不好,而是讓競爭的感覺沒有以前那麼強烈,過去的競爭壓力大,若是不努力的話,本來在你之後的人很快就會追上來,也因此才會加倍的努力。
Q4 我們這樣的練習方式妥不妥?也就是利用題目來磨練觀念。
剛開始是好方法,但長久來說還是把重點放在了解演算法的內容進而活用。
Q5 還有如何進步,是看別人寫的code嗎?哪裡有資源?
看別人寫的code是個不錯的方法,而且可能還蠻需要的,可以在其中找一些自己覺得很好的方式,進而內化了解,同時在比賽時,也有很高的可能性需要幫別人debug(包括平時),因此看別人的code是個不錯的學習方式,資源方面,可以看一些有solution和別人寫的code的地方,例如NTU online judge,如果需要的話,可以和助教伸帳號。
Q6 這些比賽對於未來的幫助。
可能有,但是大多數的時候,能夠在比賽中有所表現的人,在各方面的課業表現上都不會太差,也因此我們不能說有絕對的關係,但不論之後在比賽有沒有得到好成績,若是願意在這方面努力的話,實力就會有一定程度的累積,那就夠了。
Q7 ACM比賽的學習和準備上的方法。
重點在還是在於有固定的讀書會,首先可以先召集一些人(約3-5個),然後可以先讓每個人分享一下自己學到的一些演算法之類的,並且一起練習分享等,頻率方面則是一個到兩個星期一次,一次兩到三個小時。
----------------------------------------------------------------------------------
因為是隔了一天才整理好,內容方面可能會有一點出入,所以任何覺得怪怪的地方都有可能是我寫錯了,也可能是記錄時誤解教授的意思,有問題請提出吧~
2009年4月30日 星期四
如何在網誌中po程式碼
在建立新文章時
在右上角選修改html
之後在你要po的程式碼的上下加入
//上面的<>都被我改成全形的了,不能直接copy來用
就可以了
補一下
如果是<這個符號在code裡的話
要改打<
>則改成>
附上官網:
http://google-code-prettify.googlecode.com/svn/trunk/README.html
在右上角選修改html
之後在你要po的程式碼的上下加入
<pre class="prettyprint">
程式碼
</pre>
//上面的<>都被我改成全形的了,不能直接copy來用
就可以了
補一下
如果是<這個符號在code裡的話
要改打<
>則改成>
附上官網:
http://google-code-prettify.googlecode.com/svn/trunk/README.html
2009年4月29日 星期三
JAVA HW04
想法一:讓POOBoard、POODirectory及POOSLine都inherit POOItem
並在POOItem裡宣告三者
想法二:和想法一雷同,不過base class只有輸出名字的功能
想法三:不用extend,直接用陣列
首先
我們先在POODirectory中宣告
POOBoard[] Board = new POOBoard[MAX];
POODirectory[] Dir = new POODirectory[MAX];
我們先在POODirectory中宣告一個"二維的整數陣列"
int[][] A;
A = new int[MAX];
for(int i = 0 ; i<>
A[i] = new int[2];
這個陣列是1024*2的
陣列中的第一個值(A[i][0])代表"類型"
第二個值(A[i][1])代表"位置"
比如說
如果當"類型"的值為0時為splitline、1時為board、2時為directory
那有一二維陣列A[2][1024];
當A[0][0]=1 && A[0][1]=11 時
表示這個Directory的第一個(第零個)位置為一個board,而且是board[11]的內容。
並在POOItem裡宣告三者
public class POOItem {
public static final int BOARD = 1;
public static final int DIR = 2;
public static final int SLINE = 3;
public POOBoard Board;
public POODirectory Dir;
public POOSplitLine SLine;
int typeID;
}
//POOBoard的一部分
public class POOBoard extends POOItem {
private static final int MAXARTICLES = 1024;
public String Name;
private int nArticles;
private POOArticle[] Articles;
public POOBoard(String name){
this.Name = name;
super.Board = this; //<-這裡
super.typeID = POOItem.BOARD; //<-還有這裡
Articles = new POOArticle[MAXARTICLES];
nArticles = 0;
}
}想法二:和想法一雷同,不過base class只有輸出名字的功能
public class POOParent {
private String name;
public String getName(){return name;}
public void changeName(String name){this.name = name;}
}想法三:不用extend,直接用陣列
首先
我們先在POODirectory中宣告
POOBoard[] Board = new POOBoard[MAX];
POODirectory[] Dir = new POODirectory[MAX];
我們先在POODirectory中宣告一個"二維的整數陣列"
int[][] A;
A = new int[MAX];
for(int i = 0 ; i<>
A[i] = new int[2];
這個陣列是1024*2的
陣列中的第一個值(A[i][0])代表"類型"
第二個值(A[i][1])代表"位置"
比如說
如果當"類型"的值為0時為splitline、1時為board、2時為directory
那有一二維陣列A[2][1024];
當A[0][0]=1 && A[0][1]=11 時
表示這個Directory的第一個(第零個)位置為一個board,而且是board[11]的內容。
//簡單寫個範例
if(A[i][0]==0)
System.out.println("----------");
else if(A[i][0]==1)
Board[A[i][1]].show();
else if(A[i][0]==2)
Dir[A[i][1]].show();
2009年4月26日 星期日
ACM482\ACM484檢討-2
過了
(解決未初始化)
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?2nUWyE
(解決多了全形空白)
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?iW5i81
(大師範例)
/*No.484, Author: Anfranion */
http://src.wtgstudio.com/?X93re4
Anfranion大師講解:
sscanf() & strtok()法:
假設有一個複雜的輸入沒有跟你講長度,可以用sscanf()和strtok()搭配存取
char *ptr;
char input[1000];
double num[1000];
int N;
gets(input);
N = 0;
ptr = strtok(input, " ");
do
{
sscanf(ptr, "%lf", num[N]);
N++;
}while( ( ptr = strtok(NULL, " ") ) );
這樣input就會直接以double存在num[]了
/*
發問:
可是就482的狀況來看
用字串的方式存起來不是會方便些?
回答:
應該都可以
或者是不要存double改成char[]
回應:
嗯嗯
*/
(解決未初始化)
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?2nUWyE
(解決多了全形空白)
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?iW5i81
(大師範例)
/*No.484, Author: Anfranion */
http://src.wtgstudio.com/?X93re4
Anfranion大師講解:
sscanf() & strtok()法:
假設有一個複雜的輸入沒有跟你講長度,可以用sscanf()和strtok()搭配存取
char *ptr;
char input[1000];
double num[1000];
int N;
gets(input);
N = 0;
ptr = strtok(input, " ");
do
{
sscanf(ptr, "%lf", num[N]);
N++;
}while( ( ptr = strtok(NULL, " ") ) );
這樣input就會直接以double存在num[]了
/*
發問:
可是就482的狀況來看
用字串的方式存起來不是會方便些?
回答:
應該都可以
或者是不要存double改成char[]
回應:
嗯嗯
*/
ACM482\ACM484檢討
團練參考網址:
http://www.csie.ntnu.edu.tw/~u91029/Indexing.html
練習Indexing
題目ACM482 , ACM484
以下程式碼上傳皆RE,暫時找不出原因,有待查證
/*No.482, Author: JeromeWu */
http://src.wtgstudio.com/?j7I9Ac
/*No.482, Author: ApplerMan */
http://src.wtgstudio.com/?uBQngv
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?W0um0f
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?5e3F7V
另外ACM484解法參考網址
http://www.yalin.tw/acm/index.php?index=484 (作法為時間與空間的取捨)
探討ACM482題目:
1.儲存資料時必須使用字串,若用double處理格式化輸出出現問題
比如說 5.0 -2 2.00 -> 格式化 5.000 -2.000 2.000
2. linux下用gets會有warning,用fgets安全些,
使用gets的時候和scanf互用時會有問題,加個\n可以解決 ,
比如說
int N;
scanf("%d",&N);
char S[1024];
gets(S);
會有非預期的錯誤
解決方法如下
int N;
scanf("%d\n",&N);
char S[1024];
gets(S);
http://www.csie.ntnu.edu.tw/~u91029/Indexing.html
練習Indexing
題目ACM482 , ACM484
以下程式碼上傳皆RE,暫時找不出原因,有待查證
/*No.482, Author: JeromeWu */
http://src.wtgstudio.com/?j7I9Ac
/*No.482, Author: ApplerMan */
http://src.wtgstudio.com/?uBQngv
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?W0um0f
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?5e3F7V
另外ACM484解法參考網址
http://www.yalin.tw/acm/index.php?index=484 (作法為時間與空間的取捨)
探討ACM482題目:
1.儲存資料時必須使用字串,若用double處理格式化輸出出現問題
比如說 5.0 -2 2.00 -> 格式化 5.000 -2.000 2.000
2. linux下用gets會有warning,用fgets安全些,
使用gets的時候和scanf互用時會有問題,加個\n可以解決 ,
比如說
int N;
scanf("%d",&N);
char S[1024];
gets(S);
會有非預期的錯誤
解決方法如下
int N;
scanf("%d\n",&N);
char S[1024];
gets(S);
2009年4月19日 星期日
Vim學習資料整理
關於 vim 是什麼的『中文』說明:
http://sites.google.com/site/jeromewufiles/data/features.zh.txt
大家來學 vim:
http://info.sayya.org/~edt1023/vim/
連結失效的話可以載作者的pdf
http://sites.google.com/site/jeromewufiles/data/vim.pdf
Learning Vi/Vim editor:
http://sites.google.com/site/jeromewufiles/data/O%27Reilly%27s-LearningtheviEditor%2C6thEdition.pdf
我自己的.vimrc:
http://sites.google.com/site/jeromewufiles/data/.vimrc
----------------------------------------------------------------
其實長久以來
我一直在觀望說要學Vim(完整地)還是emacs(從頭)
今天查了不少資料
最後還是決定認真學Vim了
目標是Vim的達人!!
上面整理了不少資料
有興趣學的就看看吧
http://sites.google.com/site/jeromewufiles/data/features.zh.txt
大家來學 vim:
http://info.sayya.org/~edt1023/vim/
連結失效的話可以載作者的pdf
http://sites.google.com/site/jeromewufiles/data/vim.pdf
Learning Vi/Vim editor:
http://sites.google.com/site/jeromewufiles/data/O%27Reilly%27s-LearningtheviEditor%2C6thEdition.pdf
我自己的.vimrc:
http://sites.google.com/site/jeromewufiles/data/.vimrc
----------------------------------------------------------------
其實長久以來
我一直在觀望說要學Vim(完整地)還是emacs(從頭)
今天查了不少資料
最後還是決定認真學Vim了
目標是Vim的達人!!
上面整理了不少資料
有興趣學的就看看吧
2009年4月18日 星期六
2009年4月17日 星期五
UML - NetBean
算是很不錯的工具了
//重點是跨平臺XDDDD
下載點:
http://www.netbeans.org/downloads/index.html
//似乎在寫JAVA時也可以用
UML plugins 的介紹:
http://www.netbeans.org/features/uml/index.html
簡易安裝方法
選tools->plugins
接著選available plugins
在右上角的search打uml
會找到一個結果
打勾
之後選左下角的install就好了
簡單的展示及教學:
http://www.netbeans.org/kb/trails/uml.html
別人使用後的心得:
-----------------------------------------------------------------
用了幾天Netbeans UML,除了時不常的沒法生成代碼之外,其餘都還好。
寫點我的體會出來,也算做個總結
優點
1.類圖插入屬性屬性後可以自動產生getter和setter方法,刪除屬性也會自動把getter和setter方法刪除,很方便。
2.很好的代碼生成功能,如果修改了類圖之後重新生成類代碼,已經寫的代碼不會被錯誤的覆蓋,非常智能。
3.導入功能很不錯,不用把所有的類都放在一個uml 工程裏了。
4.生成報表功能很棒,可以直接生成javadoc,方便無比。
5.鍵盤操作支持的很好,幾乎和rose一樣好用。
優點就這麼些了,下面談談缺點
1.代碼生成功能動不動就不好使了,只有把用戶數據刪除才可以繼續使用(windows下的用戶數據在documents and setting/application data目錄下,linux的用戶數據在~/.Netbeans目錄下)
2.導入功能不支持循環導入,比如A工程導入了B工程,那麼B工程就不能再導入A工程了。
3.導入功能做的不夠人性化,折騰了半天我才知道原來是用拖拽來實現導入的,怎麼也沒個菜單項??!!
4.要是支持導入jdk的幾個包就好了,也許有這功能,但我沒找到罷了。
5.幫助文檔太簡單了,都是廢話,明顯是對付,網上的資料也少,只能靠著自己摸索。
6.重構功能太弱,像是圖例改名功能太弱了,模型名字倒是改了,工程目錄裏的xml文件為什麼不改呢?
7.圖例遷移功能太弱,從舊工程遷移到新工程的話,一些對象間的關系就丟失了,還得手工重建,我的建議是再這個功能完善之前,最好工程建好之後就不要再遷移了,否則很累人的。
8.報表功能應該提供RTF格式報表啊,如果客戶需要一份設計文檔,難道要把javadoc風格的文檔給客戶嗎?客戶還不得瘋掉。
9.保存的時候Netbeans容易死掉,我的建議是最好能做一點就存一點,這樣可以減小損失。
10.根據類圖生成java代碼的時候,注釋中的中文都成了Unicode字符。
------------------------------------------------------------------
在youtube上打「netbeans uml」可以找到不少教學影片
//重點是跨平臺XDDDD
下載點:
http://www.netbeans.org/downloads/index.html
//似乎在寫JAVA時也可以用
UML plugins 的介紹:
http://www.netbeans.org/features/uml/index.html
簡易安裝方法
選tools->plugins
接著選available plugins
在右上角的search打uml
會找到一個結果
打勾
之後選左下角的install就好了
簡單的展示及教學:
http://www.netbeans.org/kb/trails/uml.html
別人使用後的心得:
-----------------------------------------------------------------
用了幾天Netbeans UML,除了時不常的沒法生成代碼之外,其餘都還好。
寫點我的體會出來,也算做個總結
優點
1.類圖插入屬性屬性後可以自動產生getter和setter方法,刪除屬性也會自動把getter和setter方法刪除,很方便。
2.很好的代碼生成功能,如果修改了類圖之後重新生成類代碼,已經寫的代碼不會被錯誤的覆蓋,非常智能。
3.導入功能很不錯,不用把所有的類都放在一個uml 工程裏了。
4.生成報表功能很棒,可以直接生成javadoc,方便無比。
5.鍵盤操作支持的很好,幾乎和rose一樣好用。
優點就這麼些了,下面談談缺點
1.代碼生成功能動不動就不好使了,只有把用戶數據刪除才可以繼續使用(windows下的用戶數據在documents and setting/application data目錄下,linux的用戶數據在~/.Netbeans目錄下)
2.導入功能不支持循環導入,比如A工程導入了B工程,那麼B工程就不能再導入A工程了。
3.導入功能做的不夠人性化,折騰了半天我才知道原來是用拖拽來實現導入的,怎麼也沒個菜單項??!!
4.要是支持導入jdk的幾個包就好了,也許有這功能,但我沒找到罷了。
5.幫助文檔太簡單了,都是廢話,明顯是對付,網上的資料也少,只能靠著自己摸索。
6.重構功能太弱,像是圖例改名功能太弱了,模型名字倒是改了,工程目錄裏的xml文件為什麼不改呢?
7.圖例遷移功能太弱,從舊工程遷移到新工程的話,一些對象間的關系就丟失了,還得手工重建,我的建議是再這個功能完善之前,最好工程建好之後就不要再遷移了,否則很累人的。
8.報表功能應該提供RTF格式報表啊,如果客戶需要一份設計文檔,難道要把javadoc風格的文檔給客戶嗎?客戶還不得瘋掉。
9.保存的時候Netbeans容易死掉,我的建議是最好能做一點就存一點,這樣可以減小損失。
10.根據類圖生成java代碼的時候,注釋中的中文都成了Unicode字符。
------------------------------------------------------------------
在youtube上打「netbeans uml」可以找到不少教學影片
2009年3月28日 星期六
訂閱:
意見 (Atom)