java算法竞赛必备之快读快写(超详细解读)
java写算法的缺点:速度慢、读写复杂、莫名WA(错误答案)、TL(超时)、CL(超内存)…
(那我们还学个啥啊,都转c++写算法不香嘛。)别急别急,有缺点不就有优点嘛。
香不香咱不知道。但是玩c++的咱都惹不起。大佬太多,太卷了啊。
所以java优势就体现出来啊。
java写算法的优点:人少比赛好拿奖,java作为老牌语言在web和安卓领域还是爸爸级的存在所以用java写算法也可以为以后开发做准备啊。。。
废话不多说了,快读快写直接上。
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));//快读
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));//快写
使用方法:这里推荐一个超级方便的使用方法,直接写一个读类
class Read{
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws Exception{
st.nextToken();
return (int)st.nval;
}
public String readLine() throws Exception{ // 不推荐使用
st.nextToken();
return st.sval;
}
}
下面演示一下这个读类的使用
package demo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
PrintWriter p = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
Read r = new Read();
int a = r.nextInt();
String str1 = r.readLine();
int b =r.nextInt();
String str2 = r.readLine();
System.out.println(a+str1+b+str2);
}
}
class Read{
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public int nextInt() throws Exception{
st.nextToken();
return (int)st.nval;
}
public String readLine() throws Exception{ // 这个不推荐使用
st.nextToken();
return st.sval;
}
}
输入
32
adfa
23
AAA
输出
32adfa23AAA55
由输入输出知道,值都是读进来的。
注意
我们在使用StreamTokenizer时一般只用来处理数字的输入,对于字符串不使用上面的st.sval即上面的readLine()方法,因为st.sval只会读取字母,对于特殊符号和数字不会读取,读入的会是null。
所以如果我们遇到读字符串的还是老老实实的使用BufferedReader。
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
bf.readLine();
好了,看完这篇文章后你可以忘记Scanner了。我这里就不举例子来对比Scanner,BufferedReader,StreamTokenizer他们三个的读入时间,你只要记住BufferedReader和StreamTokenizer是远远比Scanner速度快的。所以咱就忘了他吧。我知道你可能不舍得。但这是我们进步的象征。最后附上证书,快读还是有用的,哈哈哈。