Report Card :
ID,CourseName01,Grade01,CourseName02,Grade02,......
1,國文上,92,普通物理學甲上,100,計算機程式設計,100
Account_Password :
account,password
b97902020,neverRevoke
公告區
Work Harder!!!!
2009年5月28日 星期四
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個),然後可以先讓每個人分享一下自己學到的一些演算法之類的,並且一起練習分享等,頻率方面則是一個到兩個星期一次,一次兩到三個小時。
----------------------------------------------------------------------------------
因為是隔了一天才整理好,內容方面可能會有一點出入,所以任何覺得怪怪的地方都有可能是我寫錯了,也可能是記錄時誤解教授的意思,有問題請提出吧~
訂閱:
意見 (Atom)