JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 技巧文件 » UVA(ACM)討論  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by 秒殺 at 2008-09-28 12:08
本主題所含的標籤
作者 用 Java 參加 UVa Online Judge 必備程式 [精華]
秒殺



版主

發文: 131
積分: 2
於 2008-09-14 00:03 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
用 Java 處理基本的 I/O 會比起 C, C++, Pascal 難上一些
而且 Java 內建的 Scanner 速度不夠快, 有些題目必定會 TLE
這個程式片段用在解題上非常方便而且速度又很快的喔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
 * ### 真難的題目: 狗屁演算法 (測資很機車)
 * 測驗結果: x.xx0 ms
 * 測驗日期: 200y-mm-dd
 * @author Raymond Wu (小璋丸)
 */
public class Main {
 
  // 輸入緩衝區 (緩衝空間需要依照題目調整)
  public static byte[] cinbuf = new byte[1024];
 
  // 讀取一個單字 (英文姓名包含空白時請不要用)
  public static String readToken() {
    int offset = 0;
    int bytedata = -1;
    
    try {
      // 略過非單字的字元 '\t','\n','\r',' '
      bytedata = System.in.read();
      while(bytedata==9||bytedata==10||bytedata==13||bytedata==32) {
        bytedata = System.in.read();
      }
 
      // 載入單字的字元
      while(bytedata!=-1) {
        if(bytedata==9||bytedata==10||bytedata==13||bytedata==32) {
          break;
        } else {
          cinbuf[offset++] = (byte)bytedata;
        }
        bytedata = System.in.read();
      }
    } catch(Exception e) {}
    
    if(offset+bytedata==-1) return null; // 串流結束
    return new String(cinbuf,0,offset);
  }
  
  // 讀取一行
  public static String readLine() {
    int offset = 0;
    int bytedata = -1;
    
    try {
      // 載入整行
      bytedata = System.in.read();
      while(bytedata!=-1) {
        if(bytedata==10) {
          break;
        } else {
          cinbuf[offset++] = (byte)bytedata;
        }
        bytedata = System.in.read();
      }
    } catch(Exception e) {}
 
    if(offset+bytedata==-1) return null; // 串流結束
    if(cinbuf[offset-1]=='\r') offset--; // window 要去除 '\r' 字元
    return new String(cinbuf,0,offset);
  }
  
  // 轉成 int 型態 (比 Integer.parseInt() 快)
  public static int parseInt(String s) {
    int i;
    int mul = 10;
    int value = s.charAt(s.length()-1)-48;
    
    for(i=s.length()-2;i>=0;i--) {
      value += (s.charAt(i)-48)*mul;
      mul *= 10;
    }
    
    return value;
  }
  
  public static void main(String[] args) {
    // TODO
  }
 
}


秒殺 edited on 2008-09-28 10:53
reply to postreply to post
作者 Re:[UVA] 用 Java 參加 UVA(以前的ACM) 競賽必備程式 [Re:秒殺]
秒殺



版主

發文: 131
積分: 2
於 2008-09-20 03:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
以 Java 語言參賽注意事項
1. Java 的執行必須透過 JVM 間接執行, 因此執行速度會慢一些, 演算法稍微不好就會 TLE
2. Java 內建 Scanner, BufferedReader 速度上幾乎不堪一擊, 必須用上述的程式碼比較好過
3. 如果題目會需要大量輸出, 則盡量少用 System.out.print() 要改用 System.out.write() 效能會好非常多
4. 遇到大量輸入的時候要特製 input 的程式碼, input 程式此時必須非常精簡, 否則保證 TLE
5. 與排序相關的問題盡量使用 Arrays.sort(), 非數值的資料排序要設計成 Comparable 型態

有興趣也歡迎回應喔


reply to postreply to post
作者 Re:[UVA] 用 Java 參加 UVA(以前的ACM) 競賽必備程式 [Re:秒殺]
tomoyaken14





發文: 24
積分: 0
於 2011-04-18 22:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不好意思 請問何謂 特製的input程式碼???
還有 System.out.write();要如何應用呢??

謝謝Smile


reply to postreply to post
作者 Re:用 Java 參加 UVa Online Judge 必備程式 [Re:秒殺]
skywild





發文: 11
積分: 0
於 2012-02-14 13:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以麻煩大大解釋一下程式碼的關鍵地方嗎?
這樣只貼程式碼,可能不利大家學習哦…
^^


reply to postreply to post
» JWorld@TW »  Java 技巧文件 » UVA(ACM)討論

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8